2015-07-27 3 views
0

У меня есть один UIView. Я собираюсь добавить несколько разных видов (например, панель навигации). Где я должен помещать селектор, который я использую для каждой кнопки, чтобы сохранить структуру MVC?Где я должен поместить селектора для UIButtons в многоразовый UIView?

Мое первое предположение заключалось бы в создании NavButtonsViewController, но это кажется забавным, так как я должен был создать экземпляр контроллера вида где-то в UIView, чтобы добавить целевые и селекторы к кнопкам. Или так оно и должно работать?

ответ

0

Я думаю, что в двух решений, если вид является многоразовым

1- Добавить селекторы в UIView подкласса и определяют где делегат должен заботиться о действиях в представлении.

Заголовок файла

@protocol SubviewActionDelegate 
@optional 
- (void)button1Selected; 
@end 

@interface Subview: UIView 
@property (nonatomic, weak) id<SubviewActionDelegate> delegate 
@end 

файл Реализация

[self.button1 addTarget:self action:@selector(buttonSelected:) forControlEvents:UIControlEventTouchUpInside]; 
... 
- (IBAction)buttonSelected:(UIButton *)sender { 
if(self.delegate respondsToSelector:@selector(button1Selected)) { 
    [self.delegate button1Selected]; 
    } 
} 

Класс, который добавляет этот многоразовый вид, как подтаблицы должны реализовать этот делегат и определить себя в качестве делегата.

2- Добавить селекторы в том же UIView или UIViewcontroller что добавить Ваше мнение, как подвид.

Subview *view = [Subview alloc]initWithFrame:CGRectZero]; 
view.button1 addTarget:self action:@selector(buttonSelected:) forControlEvents:UIControlEventTouchUpInside]; 
... 
- (void)buttonSelected:(id)sender{ 
    NSLog(@"Button selected"); 
} 

Теперь, если у вас есть более чем одна из этих многоразовых взглядов в том же UIViewController или UIView контейнер (как UITableViewCell), вы можете определить, какое представление является тот, который вы ищете, установив вид или кнопку tag стоимость.

[subview.button1 setTag:someValue]; 
... 
- (void)buttonSelected:(UIButton *)sender{ 
    if(sender.tag == someValue) { 
    //do something 
    } else { 
    //do something else 
    } 

Надеется, что это помогает

1

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

Селекторы вида, вероятно, ничего не сделают, кроме отправки делегату.

1

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

UINavigationBar и UINavigationBarDelegate - хорошее место для поиска шаблона делегирования, аналогичного тому, что вы описали.

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UINavigationBar_Class/index.html

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UINavigationBarDelegate_Protocol/index.html

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