覆盖layoutSubviews以调用[super layoutSubviews],然后查找并重新定位按钮的视图

时间:2011-11-10 11:16:41

标签: iphone objective-c xcode cocoa-touch uinavigationbar

我正在尝试重新定位我的UIBarButtonItem,使其位于UINavigationBar顶部和右侧的边缘。我找到this accepted answer如何做到这一点,但我真的不明白如何编码它。

我首先创建了一个名为CustomNavBar的新类,它继承自UINavigationBar。然后我将此方法放在实现中:

- (void) layoutSubviews
{


}

我不明白的是答案中的部分

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

我该如何编码?即使是正确方向的推动也会有所帮助。谢谢!

2 个答案:

答案 0 :(得分:16)

在调用layoutSubviews后找到要移动的按钮,因为每次调用layoutSubviews时,它都会重新定位到iOS所希望的位置。

- (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
        }
    }
}

答案 1 :(得分:3)

您可以循环浏览子视图,并使用NSClassFromString比较当前的子视图是否是您想要的那个,例如:

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

您还可以在for循环中使用NSLog来查看不同的子视图。