Доступ к родительскому виду из chid UIView - PullRequest
5 голосов
/ 05 февраля 2012

У меня есть UIViewController с XIB, и с помощью Interface Builder я добавил дочерний UIView.В дочернем UIView, когда я нажимаю на объект в этом представлении, я хочу иметь возможность изменять заголовок всего окна.

Теперь я обычно делаю эту настройку

self.title = @"hi";

на родительском UIViewController.Но есть ли какой-нибудь способ, которым я могу получить доступ к родительскому заголовку изнутри ребенка?

Я пробовал

self.superview.title = @"i";
self.parentViewController.title = @"hi";

, но ни одна из них не работает.Любая помощь высоко ценится

спасибо

1 Ответ

2 голосов
/ 05 февраля 2012

self.superview.title = @"i"; соответствует объекту типа UIView, а UIView не имеет свойства title.UIViewController s имеют свойство parentViewController, а UIView s - нет.

Поэтому фундаментальная проблема заключается в том, что вы неправильно разделяете свой контроллер и классы представления.Обычно вы делаете так, чтобы представление, которое вы хотите перехватывать, находилось в подклассе UIControl (что вроде UIButton уже есть, но если это пользовательский подкласс UIView, тогда вы можете просто изменить его на UIControl подкласс, так как UIControl сам является подклассом UIView), затем в свой контроллер добавьте что-то вроде:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // we'll want to know if the view we care about is tapped;
    // we've probably set up an IBOutlet to it but any way of
    // getting to it is fine
    [interestingView
               addTarget:self
               action:@selector(viewTapped:)
               forControlEvents:UIControlEventTouchDown];

     // UIButtons use UIControlEventTouchUpInside rather than
     // touch down if wired up in the interface builder. Pick
     // one based on the sort of interaction you want
}

// so now this is exactly like an IBAction
- (void)viewTapped:(id)sender
{
    self.title = @"My new title";
}

Таким образом, вы явно не вкладываете в представление какие-либо сведения о его положении виерархия представления или то, как ваши контролеры представления намереваются действовать.Вы просто говорите ему, чтобы он выкрикнул, если он получит взаимодействие с пользователем.

...