Передать значение из UIView в UIViewController - PullRequest
2 голосов
/ 13 июня 2011

Ситуация: В главном контроллере вида у меня есть UIScrollView, и внутри него у меня все UIView работает нормально (View Controller> UIScrollView> UIView).

//In the main view controller...
- (void)viewDidLoad {
     UIView *subview1 = [[UIView alloc] initWithFrame:rect1]; //create a UIView
     [self.scrollView addSubview:subview1]; //add it to UIScrollView
}

Вопрос: Как передать строку из этого UIView обратно в мой контроллер основного вида?

1 Ответ

4 голосов
/ 13 июня 2011

Общим решением является делегирование.Вы создаете пользовательский подкласс UIView, который знает, как сообщать информацию заинтересованным лицам:

@interface MyView : UIView {}
@property(assign) id delegate;
@end

@implementation MyView

- (void) somethingHappened
{
    [delegate stringDidChange:newStringValue];
}

@end

@implementation MyController

- (void) viewDidLoad
{
    MyView *subview = …;
    [subview setDelegate:self];
}

- (void) stringDidChange: (NSString*) newStringValue
{
    NSLog(@"New string value reported from the view: %@.", newStringValue);
}

@end

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

Проблема также может быть решена с помощью уведомлений, KVO или блоков.

...