动态推送到 UIViewController
Posted
技术标签:
【中文标题】动态推送到 UIViewController【英文标题】:Push to UIViewController dynamically 【发布时间】:2012-07-06 11:26:19 【问题描述】:我是 iPhone 应用程序开发的新手。
我正在开发一个 iPad 应用程序。它在顶部包含一个菜单栏,单击它可以检索子视图。子视图由 UIPickerView 组成。从 UIPickerView 中选择一行后,导航到另一个 UIViewController。
UIPickerView 方法是在一个单独的类中编写的(由于此功能贯穿整个应用程序,我将其设为通用类)。所以,
[self.navigationController pushViewController:controller animated:YES];
对我不起作用!
我能够获得要推送的类的名称(它会根据所做的选择而变化)。有什么办法可以吗?
提前致谢:-)
【问题讨论】:
你的 UIPickerView 是如何显示的?是模态的吗?是 UIPopoverController 吗? 我只是添加一个子视图... [self.view addSubView:view]; 【参考方案1】:我猜你真正想要的是从类名创建一个对象
简单的答案是
[[NSClassFromString(className) alloc] init...]
要获得更全面的答案,您应该查看Create object from NSString of class name in Objective-C
【讨论】:
UIViewController *controller = [[NSClassFromString(string_that_holdes_ClassName) alloc] init];我对么??如果我错了,请纠正我:-)【参考方案2】:你可以使用委托方法(委托方法允许对象之间的通信)来实现这个场景
例如,在您的 UIPicker(.h) 类中定义一个委托协议,如下所示
@protocol pickerProtocol;
@interface MyPicker : NSObject
id <pickerProtocol> pickerDelegate;
@property(nonatomic,retain) id <pickerProtocol> pickerDelegate;
@end
@protocol pickerProtocol
- (void) pushViewController;
@end
并在从 UIPickerView 中选择一行时调用此委托方法
[pickerDelegate pushViewController];
然后在所有使用picker的视图控制器中编写委托方法的实现
- (void) pushViewController
[self.navigationController pushViewController:controller animated:YES];
不要按如下方式设置委托
MyPicker *picker = [MyPicker alloc]init];
picker.pickerDelegate = self;
【讨论】:
以上是关于动态推送到 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
动态生成的 ui bar 按钮需要使用 segue 推送到 popover
通过按钮推送到 laravel 上的 jquery ajax 返回视图返回到部分动态变化
使用 ADO.NET 将数据表从内存推送到 SQL Server