动态推送到 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的主要内容,如果未能解决你的问题,请参考以下文章

如何将值推送到 QML 属性变量二维数组 - 动态?

动态生成的 ui bar 按钮需要使用 segue 推送到 popover

通过按钮推送到 laravel 上的 jquery ajax 返回视图返回到部分动态变化

使用 ADO.NET 将数据表从内存推送到 SQL Server

仅由子 div 滚动 js 将内容推送到 Firefox 中的父 div

推送到 GitHub - 推送到...(回购)过早的 EOF 失败