lantianyiming 2013-07-22 03:23 采纳率: 0%
浏览 2084
已采纳

视图控制器无法设置另一个控制器文本

有一个视图控制器,带有导航条,完成按钮,两个文本域。按下完成按钮时,会调用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文件设置的,是空的。

  • 写回答

1条回答

  • ReyZhang 移动开发领域新星创作者 2013-07-22 05: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]; 
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用