NSString的设置不起作用

时间:2010-12-25 16:33:38

标签: uiviewcontroller nsstring setter

嘿所有, 这是一个有趣的。我有两个ViewControllers: 第一个(触发应用程序加载) - >显示textField和按钮。 按下按钮时,textField中的文本将通过按钮的操作方法传递给第二个ViewController。第二个ViewController是在Label中显示文本。 该字符串保持为null :-( 标签不会改变: - (

我做的其他事情 - 在第一个ViewController的动作方法内 - 我创建了一个新的UILabel(你在这里看不到它......),将其文本字段设置为我从用户收到的输入,然后我将第二个ViewController的Label设置为该标签。标签仍然没有改变,但至少新标签的文本字段确实发生了变化。如果有人能够向我解释这一点,那么我将很乐意学习另一件新事物......

第一个控制器代码:

#import "FlipsideViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {
    UITextField *theTextInput;
}

@property (nonatomic, retain) IBOutlet UITextField *theTextInput;
- (IBAction)textFieldDoneEditing:(id)sender;

- (IBAction)showInfo:(id)sender;

@end 

.m相关部分(“FlipsideViewController”是我提到的第二个ViewController):

- (IBAction)showInfo:(id)sender {    

    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    controller.delegate = self;
controller.textToTransmit.text = self.theTextInput.text;
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];

    [controller release];
}

这是第二个ViewController:

#import <UIKit/UIKit.h>

@protocol FlipsideViewControllerDelegate;


@interface FlipsideViewController : UIViewController {
    UILabel *textToTransmit;
    id <FlipsideViewControllerDelegate> delegate;

}

@property (nonatomic, assign) id <FlipsideViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UILabel *textToTransmit;
- (IBAction)done:(id)sender;
-(void)updateLabel:(NSString *)str;
@end


@protocol FlipsideViewControllerDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end

并且它是.m文件:

#import "FlipsideViewController.h"


@implementation FlipsideViewController
@synthesize textToTransmit;
@synthesize delegate;



- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];      
}


- (IBAction)done:(id)sender {
    [self.delegate flipsideViewControllerDidFinish:self];   
}

....

任何有耐心阅读我的Q的人 - 我会感激你的答案,这将有助于我前进。

的问候, 乔

2 个答案:

答案 0 :(得分:1)

使用调试器并在

行设置断点
controller.textToTransmit.text = self.theTextInput.text;

检查UILabel是否存在(非空),否则可能忘记在Interface Builder中将其链接起来。

您还可以使用NSString属性(而不是UILabel)将数据传递给控制器​​并覆盖setter方法以设置标签的文本。

答案 1 :(得分:0)

重新定位设置文字的行,以便在presentModalViewController

之后
FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
controller.delegate = self;
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];

controller.textToTransmit.text = self.theTextInput.text;
[controller release];