ios如何将自定义控制器重定向obj-c代码放在自定义视图中
Posted
技术标签:
【中文标题】ios如何将自定义控制器重定向obj-c代码放在自定义视图中【英文标题】:ios How to put custom controller redirect obj-c code in custom view 【发布时间】:2016-04-11 09:48:01 【问题描述】:我是 ios 应用程序开发的新手,也是 Objective-c 编码的新手。我不知道这是否可能。首先让我描述一下我做了什么,然后我会描述我想要什么。我在下面添加了屏幕截图,您可以直接查看或先阅读说明再查看屏幕截图。
所以,我创建了一个带有自定义视图的自定义 xib。我将其命名为 Menu.h 和 .c
我在那里放置了四个按钮,每个按钮都是在该自定义视图中创建的 IBOutlet。它们现在是在运行时创建的。我必须在情节提要中的“用户拒绝运行时属性”设置下为控制器设置一些属性。我可以使用 awakeFromNib 函数在自定义视图中获取该值。有了它,现在我可以轻松访问和更改这些按钮的属性。我还可以使用此代码对这些按钮进行操作
[btnOutlet addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];
我正在采取行动。
但我想做的是能够使用控制器重定向代码,如下所示
NSString * storyboardName = @"Main";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
ViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
[ViewController presentViewController:vc animated:YES completion:nil];
它在控制器中正常工作,但现在当我尝试将自定义视图中的该按钮操作放入该按钮操作时,它显示错误“'菜单'没有可见界面声明选择器......”。我在下面添加了屏幕截图。
no visible interface for 'Menu' declared the selector
请建议我能做些什么来解决这个问题?这让我发疯了。 :)
【问题讨论】:
presentViewController
方法只为UIViewController
子类声明。看来您的 Menu
类没有继承自 UIViewController
你的自定义类的超类是哪个?
是的,你是对的 redent84。它是 UIView Payal Maniyar
【参考方案1】:
使用情节提要时最好使用转场。在 IB 中添加一个从视图控制器(推送)到另一个视图控制器并调用 performSegue 方法:
[self performSegueWithIdentifier: @"MySegue" sender: self];
【讨论】:
【参考方案2】:确保您在 UIViewController 子类中。
从架构的角度来看,不要在 View Class 中执行类似的代码,而是使用 ViewController(因此此类方法仅在 UIViewController 子类中可用)
在您的 Storyboard 中创建一个带有唯一标识符的 segue,例如“ViewControllerSegue”,然后调用
[self performSegueWithIdentifier:@"ViewControllerSegue"];
并在
中设置您的 ViewController- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender;
【讨论】:
以上是关于ios如何将自定义控制器重定向obj-c代码放在自定义视图中的主要内容,如果未能解决你的问题,请参考以下文章