情况:在主视图控制器中,我有一个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中的字符串传递回主视图控制器?
答案 0 :(得分:4)
常见的解决方案是授权。您可以创建一个自定义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或阻止也可以解决问题。