有一個視圖控制器,帶有導航條,完成按鈕,兩個文本域。按下完成按鈕時,會調用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文件設置的,是空的。
在使用
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];
}