如何从视图中显示viewcontroller?

时间:2015-07-23 11:43:41

标签: ios objective-c iphone uiview uiviewcontroller

我搜索了Get to UIViewController from UIView?等答案以及其他几个答案,但没有成功。

我的问题是我在UIView中有一个按钮说class1,当我点击该按钮时,我想加载另一个class2视图UIViewController,由于我navigationController未收到class1,因此无法加载class2视图。

请帮助我。

谢谢, 提前。

4 个答案:

答案 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];

希望能帮到你。