【问题标题】:UILabel to control a UItextfield in another view controllerUILabel 控制另一个视图控制器中的 UItextfield
【发布时间】:2012-08-01 18:25:25
【问题描述】:

我正在使用 Xcode 4.3,并且我在一个视图控制器中有一个标签,我想更新另一个视图控制器中文本字段中的文本。我该怎么做?

【问题讨论】:

    标签: uiviewcontroller uitextfield uilabel


    【解决方案1】:

    您应该将文本放在模型类中(假设您有一个;如果没有,则需要创建它)。当最终用户编辑文本字段时,您的代码应该更改模型中的字符串;当标签显示时,您应该从模型中读取其文本。在多个类之间共享模型的最简单方法是定义 singleton

    标题:

    @interface Model : NSObject
    @property (NSString*) labelText;
    +(Model*)instance;
    @end
    

    实施:

    @implementation Model
    @synthesize labelText;
    +(Model*)instance{
        static Model *inst;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            inst = [[Model alloc] init];
        });
        return inst;
    }
    -(id)init {
        if (self = [super init]) {
            labelText = @"Initial Text";
        }
        return self;
    }
    @end
    

    使用模型:

    // Setting the field in the model, presumably in textFieldDidEndEditing:
    // of your UITextField delegate
    [Model instance].labelText = textField.text;
    
    // Getting the field from the model, presumably in viewWillAppear
    myLabel.text = [Model instance].labelText;
    

    【讨论】:

    • 模型类是第一个视图控制器的子类吗?
    • @user1497323 不,模型类是应用程序状态的持有者,如Model-View-Controller。以编辑为例。
    • 感谢您的示例,您是否使用了不同版本的 Xcode?我有一个错误说它不能识别类型“模型”。你知道另一种声明或调用模型的方法吗?
    • @user1497323 将-(id)init 方法添加到Model.m,并将labelText 的值设置为您希望出现的初始文本。目前它被初始化为nil,所以你什么也看不到。我编辑了答案以添加一个示例,说明如何做到这一点。
    • @user1497323 使用您的文本字段转到视图的视图控制器,找到其viewWillAppear 方法,并将myTextfield.text = [Model instance].labelText; 添加到该方法。
    猜你喜欢
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多