2012-03-16 90 views
0

我在尝试构建一个通过代码动态设置UILabel值的测验。 我之前成功完成了这项工作,但由于某种原因,这次不工作。我怀疑这是因为这个应用程序的结构不同。我已经尝试了不同的修复方法,但一直未能实现。动态设置UILabel的值

我的应用程序设置的方式,我有一个视图控制器与视图具有分段控制。当按所分割控制的开关中的一个,它插入一个这样的子视图:

menuTable.hidden = YES; 
additionPracticeController *additionPractice = [[additionPracticeController alloc] 
                 initWithNibName:@"additionPractice" 
                 bundle:nil]; 
    self.addPracticeController = additionPractice; 
    [self.view insertSubview:additionPractice.view atIndex:0]; 
    [additionPractice release]; 

该子视图的视图控制器显示这样视图:

- (void)viewWillAppear:(BOOL)animated{ 

firstNumberString = [NSString stringWithFormat:@"%d",arc4random() % 10]; 
firstNumberLabel.text = firstNumberString; 
secondNumberLabel.text = secondNumberString; 
[super viewWillAppear:animated]} 

我的出口连接,并我可以通过从笔尖静态设置它们来获得值(尽管这不是我想要的)。我试图设置firstNumberString等于各种值,但是当我通过代码设置值时什么也没有显示。

如果有人能帮我解决这个问题,我会非常感激。

+0

'firstNumberString'是属性吗?伊娃?你在做这个班的其他任何东西吗? – MishieMoo 2012-03-16 20:10:37

+0

您是否定义了NSString * firstNumberString = ...?或者它是你的代码中的一个特权?和firstNumberLabel。你是如何合成它的? (有或没有_或类似的东西)? – Canopus 2012-03-16 20:12:31

+0

firstNumberString是一个NSString,我声明属性为(nonatomic,copy),这就是我在应用程序中所做的工作,它使它正常工作。我所做的就是使用它来设置标签中出现的内容。 – 2012-03-16 21:01:30

回答

0

听起来好像你在Interface Builder中连接了标签。我需要看到更多的代码才能确切知道你做错了什么。确保您使用的是您的标签的属性。下面的代码是这个工作原理的简单例子。

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 
{ 
    IBOutlet UILabel *_displayMessage; 
} 

@property (nonatomic, retain) UILabel *displayMessage; 

@end 

ViewController.m

#import "ViewController.h" 

@implementation ViewController 

@synthesize displayMessage = _displayMessage; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.displayMessage.text = @"Text Changed!"; 
} 

- (void)viewDidUnload 
{ 
    self.displayMessage = nil; 
    [super viewDidUnload]; 
} 

- (void)dealloc 
{ 
    [_displayMessage release]; 
    [super dealloc]; 
} 

@end 

而不是使你的类的UIControl的子类只需要实现以下这种方法。当用户点击完成或返回键将辞职

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
    return YES; 
} 

为了当用户点击文本字段之外的文本字段解雇。

将此放在viewDidLoad中:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self 
                     action:@selector(dismissKeyboard)]; 

[self.view addGestureRecognizer:tap]; 

放置类中此方法:

-(void)dismissKeyboard 
{ 
     [aTextField resignFirstResponder]; 
} 

此外,如果你想从另一个按钮关闭该文本字段spefically,而不仅仅是一个屏幕上轻点。然后在按钮内调用它。

[your_textfield_name resignFirstResponder]; 
+0

我的标签被宣布为属性。所以这不是问题。 (我添加了另一条评论,上面有更多的信息。) – 2012-03-17 00:16:10

+0

我确实有编码,所以用户可以按下完成,但我也希望能够在用户点击视图的另一部分时关闭键盘。这并不是绝对必要的,但这是我认为ios用户在有数字键盘时所期待的额外便利。 – 2012-03-17 02:50:18

+0

检查编辑。如果你遵循它,你应该能够忽略文本字段而不管你想要什么。 – Vikings 2012-03-17 02:59:19