Доступ к родительскому представлению из UIView chid

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

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

self.title = @"hi";

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

я пробовал

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

но ни работают. Любая помощь очень ценится

Благодарность


person user930731    schedule 05.02.2012    source источник


Ответы (1)


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

Таким образом, основная проблема заключается в том, что вы неправильно разделяете свой контроллер и классы представления. Что вы обычно делаете, так это создаете представление, которое вы хотите поймать, на подклассе 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";
}

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

person Tommy    schedule 05.02.2012
comment
Спасибо, Томми, теперь все работает отлично. Как вы и советовали, я переместил все элементы управления onclick в контроллер, и представление теперь просто обрабатывает рисование. - person user930731; 05.02.2012
comment
UIResponder не является подклассом UIView. Все наоборот. - person Saurabh G; 09.01.2013
comment
@SaurabhG Действительно, я четко набрал UIResponder, где я имею в виду UIControl; Я исправлю. - person Tommy; 14.01.2013