【问题标题】:Pass a value from a UIView to UIViewController将值从 UIView 传递给 UIViewController
【发布时间】:2011-06-13 14:35:40
【问题描述】:
情况:在主视图控制器中,我有一个 UIScrollView,其中我有一个 UIView 一切正常(视图控制器 > 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 传递回我的主视图控制器?
【问题讨论】:
标签:
iphone
uiview
uiviewcontroller
uiscrollview
【解决方案1】:
常见的解决方案是委托。您创建一个自定义的 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
如果您愿意,您可以为委托创建一个协议,以便编译器可以为您检查更多内容。请注意,委托是一个分配的属性,不是保留的,因为保留的属性会导致 retain cycle。
也可以使用通知、KVO 或块来解决问题。