如何从 UIView 子类调用 UIViewController?

Posted

技术标签:

【中文标题】如何从 UIView 子类调用 UIViewController?【英文标题】:How to call a UIViewController from a UIView SubClass? 【发布时间】:2016-06-21 11:50:44 【问题描述】:

我有一个主要的UIViewController,其中我有一个UITableView

UItableView 的单元格中,我已经添加了一个UICollectionView

在-

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

我正在调用mainUIViewController的方法。

UIViewController *view = [[UIViewController alloc] init];
[view my_method];

在主视图中。

-(void)my_method 
    AnotherName *view_my=[[AnotherName alloc]initWithNibName:@"AnotherName" bundle:nil];
        [self.navigationController pushViewController:view_my animated:NO];

Viewdidload 方法正在调用,但 view 未显示。

【问题讨论】:

阅读有关添加 childViewControllers 的信息。您需要在这里了解面向对象的概念。简单地创建一个新的视图实例不会影响当前的层次结构 查看您的 View_my 方法代码? 当您在集合视图中选择一个项目时,您能否指定您希望应用程序执行的操作。这样我就可以告诉你它是如何完成的。因为无论您在做什么,从您发布的内容中似乎都不清楚。 【参考方案1】:

这是因为您通过调用[[UIViewController alloc] init] 进行了初始化。这总是返回空视图。

你应该改为这样称呼

如果您使用故事板,请给视图控制器一个故事板 ID 并调用它

MainViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"storyboard id"];

如果您使用界面生成器,请调用它

MainViewController *controller = [[MainViewController alloc] initWithNibName:@"Nib File Name" bundle:nil];

【讨论】:

我正在尝试这个,但它没有导航到查看。我放了断点,viewdidload 方法被调用但视图没有显示。 为什么要命名为 UIViewController?您不能将其命名为 UIViewController,因为它会调用 Apple 默认的 UIViewController 而不是您的自定义 UIViewController。 我想从 uiview 类中调用另一个视图控制器。 我的意思是改变这个名字:AnotherName *view_my=[[AnotherName alloc]initWithNibName:@"AnotherName" bundle:nil]; [self.navigationController pushViewController:view_my animated:NO]; 调用 viewdidload 但没有在屏幕上显示视图。【参考方案2】:

我得到了解决方案..

AnotherName *view_my = [[AnotherName alloc]initWithNibName:@"AnotherName" bundle:nil];
self.window.rootViewController = view_my;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

感谢@The Mech System ..帮助我找到解决方案.. 现在它工作正常。

【讨论】:

我很高兴它有帮助。如果对您有帮助,您能否将我的回答标记为已接受。谢谢。

以上是关于如何从 UIView 子类调用 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何子类化 UITableView?

当我们使用 UITableViewController 的子类处理表委托时,如何使 viewWillAppear 被调用?

如何让 UITableViewCell 在自定义 UIView 子类上调用 setHighlighted 或 setSelected?

从 xib 加载子类时如何设置子类 UIView 属性的值

如何从 Swift 中的 ViewController 获取 UIView 子类实例

如何初始化从 xib 加载的 UIView 子类?继承问题