В целом UIViews
не должен содержать никакой логики, которая запускает поток приложения. Это работа UIViewControllers
. Это всего лишь способ сделать дизайн вашего кода лучше и более организованным.
Один из способов, которыми я часто пользуюсь, состоит в использовании шаблона delegate
в пользовательских UIViews. Здесь S простая установка:
В файле .h MyCustomView:
@class MyCustomView;
@protocol MyCustomViewDelegate <NSObject>
@optional
- (void)myViewDidTapOnButton:(MyCustomView)myCustomView;
@end
@interface MyCustomView : UIView
@property (weak, nonatomic) id <MyCustomViewDelegate> delegate;
@end
В файле .m MyCustomView:
- (IBAction)didTapMyButton:(id)sender {
if ([self.delegate respondsToSelector:@selector(myViewDidTapOnButton:)]) {
[self.delegate myViewDidTapOnButton:self];
}
}
Затем в ViewController, который, представляя Ваше мнение:
интерфейс:
@interface MyViewController()<MyCustomViewDelegate>
@property (weak, nonatomic) IBOutlet UIView *myCustomView;
и реализация:
- (void)viewDidLoad {
[super viewDidLoad];
self.myCustomView.delegate = self;
}
- (void)myViewDidTapOnButton:(MyCustomView)myCustomView {
... code for presenting viewcontroller ...
}
Примечание: Даже если вы не используете параметр myCustomView
, который отправляется в этом методе, его общую модель и хорошую привычку всегда посылать sender
делегата как первый параметр.
Это также широко используется Apple, например. в
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
откуда вы показываете 'UIView' класса1? – Akhilrajtr
проверить мой ответ, я отредактировал. –
Я показываю class1 с панели инструментов, всякий раз, когда приложение загружает первый tabBarItem, это класс 1, который по умолчанию выбран. –