【问题标题】:UITextField: set text from a labelUITextField:从标签中设置文本
【发布时间】:2012-04-20 10:18:48
【问题描述】:

我正在尝试使用 Xcode 4 编写我的第一个 iPad 应用程序:它基于带有两个视图的“选项卡式应用程序”模板。在第一个视图中,用户选择了一个城市(标签显示选择),在第二个视图中,有一个 IBOutletCollection(UITextField) NSArray *playersData。我想将第一个视图中选择的城市设置为第二个视图中的默认城市。我检查了故事板连接,它们似乎没问题。

我什么也得不到。有什么想法吗?

第一个视图:
#导入

@interface pruebaF1FirstViewController : UIViewController
- (IBAction)selectCity:(UIButton *)sender;
@property (weak, nonatomic) IBOutlet UILabel *citySelected;
@end

第一个视图实现: #import "pruebaF1FirstViewController.h" #import "pruebaF1SecondViewController.h"

@interface pruebaF1FirstViewController ()
@property pruebaF1SecondViewController *secondView;
@end

@implementation pruebaF1FirstViewController
@synthesize citySelected;
@synthesize secondView;

- (void)viewDidLoad
...

- (IBAction)selectCity:(UIButton *)sender {
    NSString *currentCity =[sender currentTitle];
    citySelected.text=@"";
    citySelected.text =[citySelected.text stringByAppendingString:currentCity];

    /*writes null*/
    secondView.defaultCity.text=[NSString stringWithFormat:@"%@" ,currentCity];
    NSLog(@"%@",secondView.defaultCity.text);
}
@end

第二个视图标题

#import <UIKit/UIKit.h>
@interface pruebaF1SecondViewController : UIViewController <UITextFieldDelegate> 

@property (strong, nonatomic) IBOutletCollection(UITextField) NSArray *playersData;
@property (retain, nonatomic) IBOutlet UITextField *defaultCity;

- (IBAction)eraseData:(UIButton *)sender;
- (IBAction)savePlayersData:(UIButton *)sender;

- (IBAction)termsPopUp:(UIButton *)sender;

/*- (void)writeDefaultCity:(NSString *)currentCity;*/
@end

第二视图实现 #import "pruebaF1SecondViewController.h" #import "pruebaF1FirstViewController.h"

@interface pruebaF1SecondViewController ()
@property (nonatomic, strong)pruebaF1FirstViewController    *prueba;
@end

@implementation pruebaF1SecondViewController
@synthesize playersData;
@synthesize defaultCity;
@synthesize prueba;

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [self setPlayersData:nil];
    [self setDefaultCity:nil];
    [super viewDidUnload];
}

/* Return or Done button dismiss keyboard*/
-(BOOL)textFieldShouldReturn:(UITextField *)boxes
{
    for (UITextField *boxes in playersData) {
        [boxes resignFirstResponder];
    }
    return YES;
}

....

/*Trying to get city's name from first view in two ways*/

/*-(void)setDefaultCity
{ 
 NSString *defecto=prueba.citySelected.text;
 self.defaultCity.text = defecto;
}*/
- (IBAction)eraseData:(UIButton *)sender {

    for (UITextField *boxes in playersData) {
        boxes.text = @" ";
        }
}
/*
-(void)writeDefaultCity:(NSString *)currentCity
{       
    defaultCity.text =[NSString stringWithFormat:@"%@" ,currentCity]; 
    NSLog(@"Ciudad elegida: %@",currentCity);
}*/
....
@end

【问题讨论】:

    标签: objective-c xcode4 uitextfield iboutlet


    【解决方案1】:

    视图通常在显示在设备上之前不会加载,并且可以在不可见时随时卸载以节省内存。这意味着当您设置“defaultCity”的“text”属性时,该标签尚未创建。

    您应该添加一个 NSString * 属性到 pruebaF1SecondViewController 并在 viewDidLoad 中设置 defaultCity 标签的值:

    在标题中:

    @property (nonatomic, weak) UILabel *defaultCityLabel;
    @property (nonatomic, strong) NSString *defaultCity;
    

    在实施中

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        defaultCityLabel.text = defaultCity;
    }
    

    并且在第一个视图控制器中,分配字符串值而不是标签值。

    【讨论】:

    • 感谢您的回答。我试图通过按钮或标签显示城市,用户在第一个视图中选择第二个视图的文本字段中的默认城市。
    • 解决了! PruebaF1Firs...er.h 中的 Extern NSString *myCity 和我在 PruebaF1Second...er.m 中检索到 NSString 值非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    相关资源
    最近更新 更多