Переопределите layoutSubviews, чтобы вызвать [super layoutSubviews], а затем найти и изменить положение кнопки. - PullRequest
9 голосов
/ 10 ноября 2011

Я пытаюсь изменить положение моего UIBarButtonItem так, чтобы он располагался с краями к верхней и правой части UINavigationBar.Я нашел этот принятый ответ о том, как это сделать, но я не совсем понимаю, как его кодировать.

Я начал с создания нового класса с именем CustomNavBar, который наследуется от UINavigationBar.Затем я поместил этот метод в реализацию:

- (void) layoutSubviews
{


}

Что я не понимаю, так это часть ответа, в которой написано

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

Как мне это кодировать?Даже толчок в правильном направлении был бы полезен.Спасибо!

Ответы [ 2 ]

16 голосов
/ 10 ноября 2011

Найдите кнопку, которую вы хотите переместить после , когда вы звоните 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 голосов
/ 29 ноября 2011

Вы можете циклически просматривать подпредставления и сравнивать, если текущий является тем, который вы хотите, используя NSClassFromString, например, вот так:

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

Вы также можете использовать NSLog вцикл, чтобы увидеть различные подпредставления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...