程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ios-視圖控制器無法設置另一個控制器文本

ios-視圖控制器無法設置另一個控制器文本

編輯:編程綜合問答
視圖控制器無法設置另一個控制器文本

有一個視圖控制器,帶有導航條,完成按鈕,兩個文本域。按下完成按鈕時,會調用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]; 
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved