lantianyiming 于 2013.07.22 11:23 提问
- 视图控制器无法设置另一个控制器文本
-
有一个视图控制器,带有导航条,完成按钮,两个文本域。按下完成按钮时,会调用
postInfo
方法。- (void)postInfo{ ListingViewController* lvc = [[ListingViewController alloc] init]; NSString* listingName = listingNameField.text; NSString* listingPrice = listingPriceField.text; NSLog(@"%@", listingName); NSLog(@"%@", listingPrice); [lvc.titleLabel setText:listingName]; [lvc.priceLabel setText:listingPrice]; [self.navigationController pushViewController:lvc animated:YES]; }
然后是ListingViewController.h:
#import <UIKit/UIKit.h> @interface ListingViewController : UIViewController @property (weak, nonatomic) IBOutlet UILabel *priceLabel; @property (weak, nonatomic) IBOutlet UILabel *titleLabel; @end
UILabel是通过xib文件设置的,是空的。
-
-
zhanglei5415
2013.07.22 13:29
- 已采纳
在使用
ListingViewController* lvc = [[ListingViewController alloc] init];
创建控制器时只是执行了创建lvc对象并做了相应的初始化。但在未显示这个视图前,系统不会调用loadview, viewDidLoad 等方法来加载视图中的元素。也从而导致你后台代码的赋值操作没有起到作用
NSString* listingName = listingNameField.text;
NSString* listingPrice = listingPriceField.text;
NSLog(@"%@", listingName);
NSLog(@"%@", listingPrice);
[lvc.titleLabel setText:listingName];
[lvc.priceLabel setText:listingPrice];
如果只是为了给uilabel赋值而公开uilabel是没有必要的。正确的做法是定义一个model,或者直接传递要传递的参数。
在ListingViewController 中可定义两个成员变量
NSString *_name;
CGFloat _price;
在写一个赋值的方法
-(void)setName:(NSString *)name price:(CGFloat)price {
_name=name;
_price=price;
}
接着在viewDidLoad 或viewDidAppear方法中来赋值了
-(void)viewDidLoad {
[titleLabel setText:_name];
[priceLabel setText:[NSString stringWithFormat:@"%f",_price];
}
在postInfo中的实现代码应该像如下这样:
- (void)postInfo{
NSString* listingName = listingNameField.text;
NSString* listingPrice = listingPriceField.text;
ListingViewController* lvc = [[ListingViewController alloc] init];
[lvc setName:listingName price:[listingPrice floatValue]];
[self.navigationController pushViewController:lvc animated:YES];
}
-
- lantianyiming 谢谢~
- 4 年多之前 回复
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!