我搜索了Get to UIViewController from UIView?等答案以及其他几个答案,但没有成功。
我的问题是我在UIView
中有一个按钮说class1
,当我点击该按钮时,我想加载另一个class2
视图UIViewController
,由于我navigationController
未收到class1
,因此无法加载class2
视图。
请帮助我。
谢谢, 提前。
答案 0 :(得分:1)
通常UIViews
不应包含任何触发应用程序流的逻辑。这是UIViewControllers
的工作。这只是让代码设计更好,更有条理的一种方式。
我经常使用的一种方法是在我的自定义UIViews中使用delegate
模式。这是一个简单的设置:
在MyCustomView .h文件中:
@class MyCustomView;
@protocol MyCustomViewDelegate <NSObject>
@optional
- (void)myViewDidTapOnButton:(MyCustomView)myCustomView;
@end
@interface MyCustomView : UIView
@property (weak, nonatomic) id <MyCustomViewDelegate> delegate;
@end
在MyCustomView .m文件中:
- (IBAction)didTapMyButton:(id)sender {
if ([self.delegate respondsToSelector:@selector(myViewDidTapOnButton:)]) {
[self.delegate myViewDidTapOnButton:self];
}
}
然后在你的viewcontroller中展示你的观点:
接口:
@interface MyViewController ()<MyCustomViewDelegate>
@property (weak, nonatomic) IBOutlet UIView *myCustomView;
和实施:
- (void)viewDidLoad {
[super viewDidLoad];
self.myCustomView.delegate = self;
}
- (void)myViewDidTapOnButton:(MyCustomView)myCustomView {
... code for presenting viewcontroller ...
}
注意强>:
即使你不使用在这个方法中发送的参数myCustomView
,它也是一个常见的模式和习惯,总是发送委托的sender
作为第一个参数。
这也被Apple大量使用,例如:在
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
答案 1 :(得分:1)
两种情况:
如果您使用的是storyboard,请将您的NavigationController设为
故事板ID。在你的身上创建一个navigationController
的对象
自定义UIView
类。
如果您已自定义从AppDelegate
启动的应用程序,请创建一个
您public property
的{{1}}。在您的navigationController
班级中,使用UIView
创建appDelegate的对象。从此对象访问[UIApplication sharedApplication].delegate
当您拥有navigationController property
对象时,可以使用以下命令推送视图控制器:
navigationController
答案 2 :(得分:1)
首先使用“MyViewController”填充故事板ID,这是一个String字段,可用于基于该故事板ViewController创建新的ViewController。然后像这样访问那个视图控制器:
- (IBAction)buttonPressed:(id)sender{
MyCustomViewController *newvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
[self presentViewController:newvc animated:YES completion:nil];
}
答案 3 :(得分:0)
单击按钮时,可以执行以下操作:
YouViewController *yourViewController = [YouViewController new];
[self.view addSubView:yourViewController.view];
希望能帮到你。