【问题标题】:how can i give input for UILabel in iPhone如何在 iPhone 中为 UILabel 提供输入
【发布时间】:2011-12-20 12:09:14
【问题描述】:

我有 2 节课。在我的第一堂课中,我有一个标签。现在我必须从我的第二堂课中为该标签提供输入。 这是我的代码。

 IBOutlet UILabel *label1;

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

@synthesize label1;

我这样称呼这个标签。 我导入我的 class1 并创建像 classone 这样的对象。 我检查了(NSLog print)类,该方法将被调用,但输入不会出现。我检查了它也连接到我的类的标签。因为我在我的viewDidLoad 中给出了相同的输入,那时它工作正常。

 NSString *ram= @":13123123312";
        classone.label1.text= ram;

指导我哪里做错了。

【问题讨论】:

  • @Adil Soomro 不,我从我的二年级加载这个值。

标签: iphone objective-c xcode4.2


【解决方案1】:

设置先前视图的值比这更棘手。操作系统在内存压力下删除了什么视图?

设置这些值的正确方法是使用整个 Cocoa 框架中使用的 MVC 模式。您的第二个视图控制器设置了前一个视图控制器的属性。而当需要显示前一个视图时,它会从这个属性中获取它的值。

正确连接视图控制器以与堆栈中较低的另一个视图控制器对话的常用方法是使用委托协议。

我刚才写了一个例子DelegationExample,它显示了第一个视图中的文本字段如何使用委托协议由第二个视图控制器中的文本字段值填充。看看我是如何做到的,您可能会发现它很有用。

更新

我已使用 ARC 和 Storyboards 更新了 iOS6 新项目的链接

【讨论】:

    【解决方案2】:

    在 AppDelegate 类中取一个NSString 变量并正确合成。并将第二类变量的值存储为:

    appDelegate.strLbl = [NSString stringWithformat:@"%@",strVal];
    

    然后将该值复制到第一类的标签中,例如:

    lblVal.text = [NSString stringWithformat:@"%@",appDelegate.strLbl];
    

    希望对您有所帮助。谢谢。

    【讨论】:

    • 其实没那么好。它违反了 OOP,将 AppDelegate 用作通用存储类是初学者的错误。
    • 你能指导我它是如何违反 OOP 的吗?
    • 您正在存储在 AppDelegate 的第一个视图中使用的值。您这样做的唯一原因是第二个视图控制器可以更改它。因此,您的第一个视图控制器所需的数据并未封装在一个类中。
    • 好的,它会影响应用程序的加载速度和其他内存问题吗?
    • 您需要通过分析器运行它以查看它有多大的影响 - 但这不是这里的问题。糟糕的设计是问题所在。方法是使用委托协议。
    【解决方案3】:

    其实你应该有二等一等的参考。您不应分配新实例。如果您创建新实例,则您为其设置标签值的实例与单击返回时看到的实际实例不同。

    我猜你明白了。

    【讨论】:

      【解决方案4】:

      Aadhira 是对的,当您在 class2 中创建 class1 的新实例时,它是错误的, 您必须获取class1的原始实例,这可以通过创建一个返回class1当前实例的静态函数来实现,如下所示

      static  classone*  sInstance;
      
      @implementation classone
      
      - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
          self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
          if (self) {
              // Custom initialization.
          }
          sInstance = self;
          return self;
      }
      
      +(classone*) getInstance {
         // NSAssert (sInstance!=nil, @"classone:getInstance: called when singleton was not initialized!");
          return sInstance;
      }
      

      【讨论】:

      • 跳过你不需要的圈子,在你不需要的时候创建一个单例......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2021-06-14
      • 2019-04-17
      相关资源
      最近更新 更多