2011-11-10 20 views
8

我試圖重新定位我的UIBarButtonItem,以便它位於UINavigationBar的頂部和右側。我發現this accepted answer如何做到這一點,但我真的不知道如何編寫它。覆蓋layoutSubviews調用[super layoutSubviews],然後找到並重新定位按鈕的視圖

我已經開始創建一個名爲CustomNavBar的新類,它繼承自UINavigationBar。然後我把這個方法實現:

- (void) layoutSubviews 
{ 


} 

什麼我不明白的是,上面寫着

call [super layoutSubviews] and then find and reposition the button's view. 

如何編寫這個答案的一部分嗎?即使向正確的方向推動也會有所幫助。謝謝!

回答

15

找到您想要移動你叫layoutSubviews,因爲它會被重新定位到iOS的希望它是每一個layoutSubviews被調用時的按鈕。

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    for (UIView *view in self.subviews) { // Go through all subviews 
     if (view == buttonYouWant) { // Find the button you want 
      view.frame = CGRectOffset(view.frame, 0, -5); // Move it 
     } 
    } 
} 
3

您可以遍歷子視圖和比較,如果當前是一個你想要的使用NSClassFromString,像這樣的例子:

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    for (UIView *view in self.subviews) { 
     if ([view isKindOfClass:NSClassFromString(@"TheClassNameYouWant")]) { 
      // Do whatever you want with view here 
     } 
    } 
} 

你也可以使用NSLog在for循環看到不同的子視圖。

+2

爲什麼你會想用'NSClassFromString'而不是'[TheClassNameYouWant class]'?在後一種情況下,你會在重構後得到警告,在第一種情況下你不會這樣做。 – Zappel

+0

我假設'[TheClassNameYouWant class]'應該更具性能 – yano