【问题标题】:Problem setting Value for UILabel (iPhone SDK)UILabel(iPhone SDK)的问题设置值
【发布时间】:2010-01-21 20:25:28
【问题描述】:

我是 iPhone SDK 的新手,所以如果这个答案非常明显,请原谅我。

我有一个连接到 .xib 文件的 ViewController(它们被称为 FirstViewController)

我还有一个名为 MyCustomClass 的自定义类。在这个类中,我有一个这样的方法:

- (void)setTheText {
    [myLabel setText:@"foo"];
}

我想调用这个方法在FirstViewController.xib的标签中设置文本

到目前为止,我已经这样做了:

将“对象”拖入Interface Builder,并将类设置为:MyCustomClass 将 MyCustomClass 中的 IBOutlet 'myLabel' 连接到视图中的 UILabel。

但是,当我运行程序并按下按钮设置标签(位于 FirstViewController.m 中)时,类似于:

- (IBAction)doSomething:(id)sender {
   MyCustomClass *customClass = [MyCustomClass alloc] init];
   [customClass setTheText];
}

但这并没有设置。 NSLog(@"%@",[myLabel text]); 返回(空)

Xcode 没有显示错误或警告,可能是什么问题?

谢谢,

迈克尔

附加信息:

MyCustomClass.h 的接口:

#import <UIKit/UIKit.h>

@interface MyCustomClass : NSObject {
    UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;

- (void)setTheText;

@end

【问题讨论】:

  • 你能把MyCustomClass的接口贴出来吗?你是如何在其中定义 myLabel 的?

标签: iphone xcode interface-builder uilabel


【解决方案1】:

您不想在操作方法中创建自定义类的新实例。

有几种方法可以做你想做的事。

选项 1 是为您的视图控制器提供对您的自定义对象的引用。为此,请在您的视图控制器中创建一个 MyCustomClass * 类型的插座,将该插座连接到您在 XIB 文件中创建的新对象,然后在您的操作方法中删除分配:

- (IBAction)doSomething:(id)sender {       
    [customClass setTheText];
}

选项 2 是让您的 CustomClass 处理标签 操作方法。为此,您可以进一步简化事情。将UILabel 的出口放入CustomClass,然后简单地将setTheText 方法转换为操作:

- (IBAction)setTheText:(id)sender {
    [myLabel setText:@"foo"];
}

现在,将该动作连接到您的按钮,一切都应该像魅力一样发挥作用。

注意:您可能应该使用不以“set”开头的方法名称,因为它们通常用于属性设置器,作为 Cocoa 的 KVC/KVO 系统的一部分。相反,我会将其称为 changeLabel 或类似名称。

【讨论】:

    【解决方案2】:

    您在此处的 customClass 实例与 NIB 完全无关。您已经使用 +alloc 实例化了一个新对象。如果要修改 NIB 中的特定 MyCustomClass,则 FirstViewController 需要一个指向它的 IBOutlet。

    【讨论】:

      【解决方案3】:

      UILabel 还有一个名为 text 的属性来设置值,你可能会发现这更容易。

      myObject.myLabel.text = @"Your text";
      

      【讨论】:

      • 感谢您的提示。我知道点语法,但我有一个反对它的“东西”=P,更喜欢好的旧方括号!
      • 知道了,这对于习惯于其他语言的人来说更方便。
      【解决方案4】:

      好吧,您将标签称为两件事,首先是非 ibaction,然后是属性中的 ibaction。

      【讨论】:

        猜你喜欢
        • 2011-10-13
        • 1970-01-01
        • 2012-03-31
        • 1970-01-01
        • 2016-01-17
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 2011-05-14
        相关资源
        最近更新 更多