2012-02-05 5 views
4

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

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

self.title = @"hi"; 

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

Я попытался

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

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

благодаря

ответ

2

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"; 
} 

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

+0

Спасибо Tommy, thats отлично работает сейчас. Как вы посоветовали, я переместил весь элемент управления onclick в контроллер, и теперь представление просто обрабатывает чертеж. – user930731

+1

UIResponder не является подклассом UIView. Это наоборот. –

+1

@SaurabhG Действительно, я четко набрал 'UIResponder', где я имею в виду' UIControl'; Я исправлю. – Tommy

Смежные вопросы