【问题标题】:Xcode Objective C - Change UILabel Text From Another ClassXcode Objective C - 从另一个类更改 UILabel 文本
【发布时间】:2017-08-02 09:06:10
【问题描述】:

我有 2 个视图控制器,vc1 和 vc2。

vc1 有一个 UILabel。 vc2 有一个 UIButton。当在 vc2 上单击按钮时,我希望 vc1 的 uiLabel 上的文本发生变化。我该怎么做?

vc1.h

@interface vc1 : UIViewController

@property (strong, nonatomic) IBOutlet UILabel *textLabel;

@end

vc1.m

@interface vc1 ()

@end

@implementation vc1

@synthesize textLabel = _textLabel; 

@end

vc2.m

#import "vc2.h"
#import "vc1.h"

@interface vc2 ()

@end

@implementation vc2

- (IBAction)onClick:(id)sender {

    vc1 *vc1Object = [[vc1 alloc] init];  //create object

    vc1Object.textLabel.text=@"New Text";  //set new text 
}

我上面的代码不起作用,因为它正在创建一个新实例而不是访问原始属性。但是,我不知道如何为 IBOutlets 创建 getter/setter,或者是否有其他方法。如何从第二个视图控制器更改 UIlabel 上的文本?

任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 您可以使用以下任何一种:- 1.NSNotificationCenter 2.KVO 3.Delegates 4.Block
  • 您是如何管理 v1 和 v2 的?你要从 v2 到 v1 吗?或者这个 v1 和 v2 是 uiviewcontainers?或者您从 v2 发送回 v1 - 方法会有所不同
  • @pkc456 我最终使用了 NSNotificationCenter,感谢您的帮助!
  • @hmzfier 我应该把它作为答案,以便它也可以到达有需要的人吗?

标签: objective-c xcode uilabel iboutlet


【解决方案1】:

vc2.m 文件

  • #import "VC2.h"之后首先声明VC2 Class对象如下:

    VC2 *sharedInstance;
    
  • 在vc2.h文件中声明如下方法和变量。

    @property NSString *msg;
    +(VC2 *)sharedLogger;
    
  • 然后在vc2.m文件中加入下面一行代码

    +(instancetype)sharedLogger
    {
         static VC2 *vc2 = nil;
         static dispatch_once_t oncePredicate;
    
         dispatch_once(&oncePredicate, ^{
             vc2 = [[self alloc] init];
         });
    }
    
    - (IBAction)onClick:(id)sender {
           [VC2 sharedLogger].msg = @"New Text";
    }
    

vc1.m 文件

  • 首先导入头文件

     #import "VC2.h"
    

在 viewDidLoad() 中编写代码

   - (void)viewDidLoad {
       [super viewDidLoad];
       _textLabel.text = [VC2 sharedLogger].msg;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多