我看过How to switch views by buttons on iPhone?的帖子,但这并没有回答如何使用按钮在视图之间来回切换。问这个问题的人确定了他们可以用uinavigationcontroller在视图之间切换的答案。
我将以下代码放在ibaction中,该按钮在主视图中按下按钮时启动。
PhoneNumberViewController *phoneNumberViewController1 = [[PhoneNumberViewController alloc] initWithNibName:@"PhoneNumberView2" bundle:nil];
self.phoneNumberViewController = phoneNumberViewController1;
[self.view removeFromSuperview];
[self.view insertSubview: phoneNumberViewController1.view atIndex:0];
当此代码执行时,整个视图将变为空白。如果我省略了removefromsuperview部分,那么视图就会消失在我的按钮后面,但按钮仍然存在。我不确定这是否是在按钮之间切换的正确方法,但如果有人知道如何做到这一点,请帮助。此外,如果有人知道任何使用按钮在视图之间切换的示例项目,请告诉我。
万分感谢!
答案 0 :(得分:2)
您从其超级视图中删除了视图控制器的视图,然后向其添加了子视图。视图层次结构在视图控制器的超级视图(可能是您的窗口)中被破坏。这就是你得到一个空白屏幕的原因。
您可能希望保留对原始视图的引用,然后通过将视图控制器的视图设置为新视图将其交换到新视图。
// origView is an instance variable/IBOutlet to your original view.
- (IBAction)switchToPhoneView:(id)sender {
if (origView == nil)
origView = self.view;
self.view = phoneViewController.view;
}
- (IBAction)switchToOriginalView:(id)sender {
self.view = origView;
}
答案 1 :(得分:1)
我通常使用的技术涉及创建一个superview类,其底部包含一个工具栏,内容视图UIView类填充屏幕的其余部分。
然后我将子视图添加到内容视图,以根据按钮点击更改视图。这种方法使得它的工具栏在所有视图中都是恒定的。我首先定义一个这样的辅助函数:
-(void) clearContentView {
//helper to clear content view
for (UIView *view in [self.contentView subviews]){
[view removeFromSuperview];
}
}
我的IBAction看起来像这样:
-(IBAction) buttonClicked{
self.title = @"Images"; //change title of view
[self clearContentView]; //clear content view
[self.contentView addSubview:self.imagesViewController.view]; //add new view
[self.imagesViewController viewWillAppear:YES]; //make sure new view is updated
[self enableButtons]; //enable all other buttons on toolbar
self.imagesButton.enabled = NO; //disable currently selected button
}