【发布时间】:2014-07-07 18:45:52
【问题描述】:
我有一个带有简单“钻入”模式的应用。我以地图模式或列表模式呈现项目列表。单击一个潜入更详细的“编辑”视图控制器。我的编辑控制器有
@property (assign, nonatomic) BOOL showMap;
在源代码实现 setter/getter 方法中:
#pragma mark - Properties
- (BOOL) showMap {
return self.viewModeSegments.selectedSegmentIndex == 1;
}
- (void) setShowMap: (BOOL) showMap {
self.view; // had to add this, it's a hack
self.viewModeSegments.selectedSegmentIndex = showMap ? 1 : 0;
}
我在初始化控制器中设置了这个属性:
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString: @"ValveEditSegue"]) {
ValveEditController* controller = segue.destinationViewController;
controller.valve = self.selections.anyObject;
controller.showMap = ShowMap;
}
}
我发现,showMap setter 发生在view 被填充之前,所以viewModeSegments 仍然是nil。我尝试了 setter 中显示的 hack,它强制访问 self.view 以确保它已加载。但这似乎是个坏主意。我不知道的是,我应该改用什么模式。
我可以将showMap 设置为带有支持的普通属性,然后在viewDidLoad 时间将该状态镜像到小部件中,但是仅针对那一次蹦床般的效果拥有一个属性/状态似乎很愚蠢。
【问题讨论】:
标签: ios cocoa-touch uiviewcontroller segue uistoryboardsegue