2013-12-03 4 views
1

У меня есть UIView, как меню с кнопками.Передача события UIButton из subview в супервизор

Я добавил этот menubarView в другой вид (parentView).

Мне нужно вызвать метод на parentView на TouchUpInside кнопки меню.

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
button.frame = CGRectMake(x, y, width, height); 
[button addTarget:self action:@selector(myLocalMethod:) forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Call My Method" forState:UIControlStateNormal]; 
[self addSubview:button]; 

Решение: В menuBarView я добавил этот код:

- (void)myLocalMethod:(UIButton *)button 
{ 
    ParentView *parent = (ParentView *)self.superview; 
    [parent myMethod:button]; 
} 
+0

В настоящее время у меня есть кнопки, созданные на самом родительском экране. Но я хочу создать другое представление, чтобы иметь кнопки и помещать их в родительский вид. Я не уверен, как пройти мероприятие, поэтому я еще не сделал кода для него. – gangt

+0

Я не мог отформатировать его как «код». Это просто не работает. – gangt

+0

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

ответ

0

Попробуйте это в MyMethod

[((<SuperViewName>)self.superview) <methodInSuperView>] 

Заменить заполнители SuperViewName a nd methodInSuperView с вашими именами.

Объяснение: Я отбрасываю супервизор в соответствующий класс супервизора и вызывается требуемый метод супервизора. Убедитесь, что метод InSuperView является общедоступным (объявите его в интерфейсе).

+0

Для моего текущего требования работал метод VikramRao. Я еще не пробовал использовать метод drewag. Я обновил свой вопрос с помощью решения. – gangt

0

Одним из вариантов является предоставление обратного вызова блоков на подвид:

@property (nonatomic, copy) void(^onDidTapMyButton1)(); 

Затем осуществить действие (или цели и селектор) в подпункте, который вызывает этот обратный вызов:

- (IBAction)didTapMyButton1 { 
    if (self.onDidTapMyButton1) { 
     self.onDidTapMyButton1(); 
    } 
} 

В вашем родительском окне вы можете сделать:

mySubView.onDidTapMyButton1 = ^{ 
    // perform some action 
}; 

Вы также можете сделать это с помощью одного обратного вызова для всех кнопок:

@property (nonatomic, copy) void(^onDidTapButton)(UIButton *tappedButton); 

- (IBAction)didTapButton:(UIButton *)sender { 
    if (self.onDidTapButton) { 
     self.onDidTapButton(sender); 
    } 
} 
Смежные вопросы