将数据从 UIViewController 传递到 UIView
Posted
技术标签:
【中文标题】将数据从 UIViewController 传递到 UIView【英文标题】:Passing data from UIViewController to UIView 【发布时间】:2013-03-19 23:31:17 【问题描述】:我在 UIViewController 中有一个表,我还有一个子视图 UIView。 我试图将数据从我的 UIViewController 传递到 UIView:
主视图控制器:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UAModalPanel *mainSubModalPanel = [[[MainSubView alloc] initWithFrame:self.view.bounds] autorelease];
[self.view addSubview:mainSubModalPanel];
[mainSubModalPanel showFromPoint:CGPointMake(384.5, 512.5)];
MainSubView.h
@interface MainSubView : UAModalPanel
NSString *dishName;
@property (strong, nonatomic) IBOutlet UILabel *mainTitle;
@property (nonatomic, retain) NSString *dishName;
但是,我在将数据从表视图传递到子视图中的“dishName”并设置“mainTitle”=“dishName”时遇到了麻烦 谁能帮帮我?
谢谢!
【问题讨论】:
【参考方案1】:首先,您将新分配的MainSubView
存储在UAModalPanel
指针中,尽管您需要访问的属性是MainSubView
子类的一部分。尝试将MainSubView
初始化更改为:
MainSubView *mainSubModalPanel = [[[MainSubView alloc] initWithFrame:self.view.bounds] autorelease];
现在您应该可以设置dishName
和mainTitle
的text
:
mainSubModalPanel.dishName = @"Pizza!";
mainSubModalPanel.mainTitle.text = @"Moar Pizza!";
然后将其添加为子视图以及您上面的任何其他内容(我喜欢在传递所有权之前完全设置一个对象,因为它往往会导致更少的故障)。
小记:
您的NSString *dishName
属性可能会更好地使用copy
修饰符而不是retain
。具有可变子类型的基础类型(即 NSString 有一个 NSMutableString 子类) 需要传递一个可以从外部更改的可变子类。通常,这不是您想要的,并且会导致错误(当然,除非您明确要求 NSMutableString),并且使用 copy
可以确保您传递的任何内容都保持这种状态:
@property (nonatomic, copy) NSString *dishName;
另外,如果您计划让 MainSubView 的 mainTitle.text
匹配 dishName
,您可能需要考虑为 dishName
指定一个自定义设置器方法,该方法自动设置 mainTitle.text
,如下所示:
- (void)setDishName:(NSString *)newDishName
BOOL notTheSameStringInstance = (newDishName != dishName);
BOOL notIdenticalStringContents = ![newDishName isEqualToString:dishName];
if (notTheSameStringInstance && notIdenticalStringContents)
[dishName release];
dishName = [newDishName copy];
mainTitle.text = dishName;
【讨论】:
好。很高兴能够提供帮助。【参考方案2】:将您的 init 方法调整为您传递数据的 init 方法。
MainSubView *mainSV = [[MainSubView alloc] initWithMyCustomData:(NSDictionary *)dictionaryObject andAnArray:(NSArray *)array andAString:(NSString *)string andANumber:(NSNumber *)aNumber;
【讨论】:
【参考方案3】:看起来您已经继承了 UIView 并将其命名为 MainSubView。现在,向您的子类添加一些属性并从视图控制器中设置它们。
确保将自定义 UIView 的 .h 文件包含在 UIViewController 的 .h 文件中。
mainSubModalPanel.myProperty = myString;
然后,既然您是在代码中创建自定义 UIView,请不要忘记将其添加为 UIViewController 的子视图:
【讨论】:
以上是关于将数据从 UIViewController 传递到 UIView的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 如何将数据从 UITableViewCell 类传递到 UIViewController
使用 swift 将数据从 UITabBarView 类传递到 UIViewController 的子类
如何将数据从基于 plist 的 UITableView 传递到 UIViewController
我需要使用数组将数据从 UITableViewController 传递到 UIViewController