我想知道是否有可能在从XIB文件加载的UIView中点击某处(或者执行其他操作),并从父XIB触发UIView的操作(如更改父UIView中的UIButton的标题)。这是代码NewsController类接口的一个片段:如何通过父XIB将UIView从XIB子通信到UIView?
#import <UIKit/UIKit.h>
#import "NewsPage.h"
@interface NewsController : UIViewController {
// Some objects
UIButton *loadButton;
UIView *newsView;
NewsPage *newsPage;
}
@property (nonatomic, retain) IBOutlet UIButton *loadButton;
@property (nonatomic, retain) IBOutlet UIView *newsView;
@property (nonatomic, retain) NewsPage *newsPage;
@end
,这是类实现NewsPage,我在那里加载子XIB的一个片段:
- (void)viewDidLoad {
[super viewDidLoad];
// Some code
newsPage = [[NewsPage alloc] initWithNibName:@"NewsPage" bundle:nil];
[newsView addSubview:newsPage.view];
// Some other code
}
这是一个代码片段内部NewsPage类接口:
#import <UIKit/UIKit.h>
#import "NewsController.h"
@interface NewsPage : UIViewController {
NewsController *newsController;
}
@property (nonatomic, retain) IBOutlet NewsController *newsController;
@end
,这是类实现的片段
- (void)tapAction:(UIGestureRecognizer *)gestureRecognizer {
// Some code
NewsController *newsController = [[NewsController alloc] initWithNibName:@"News" bundle:nil];
NSLog(@"Current button title is: %@\n", newsController.loadButton.titleLabel.text);
newsController.loadButton.titleLabel.text = @"New text goes here!";
NSLog(@"Current button title is: %@\n", newsController.loadButton.titleLabel.text);
// Some other code
}
使用此代码(并在IB中进行一些布线后),我在调试器中看到正确的标题,但模拟器不更新标题更改。我的猜测是,孩子UIViews平行于母公司的UIViews,即使我做这样的事情:
[newsController.loadButton removeFromSuperview]
没有在父母UIView的层次结构没有变化,因为孩子UIViews“是不是里面的”父UIView的。我希望有人能够帮助,因为这是非常令人沮丧的。提前,非常感谢。
一些基本信息的链接是否XIB连接到所有者对象是否正确?这听起来像titleLabel不存在于视图的层次结构中。所以它不会被显示。 – AechoLiu 2011-04-27 22:57:27
@Toro:是的,所有者对象已正确连接,但我不知道在父级UIView中加载的XIB对象是否属于父级的层次结构,如果是,为什么不更新从子UIView所做的任何更改父UIView。 – Raomon 2011-04-27 23:17:43