【问题标题】:How to connect viewcontroller to NSObject class file?如何将视图控制器连接到 NSObject 类文件?
【发布时间】:2017-03-21 22:01:25
【问题描述】:

我想连接并将 ViewController 中的操作传递给 NSObject 类文件。在我的视图控制器中,有 UISwitch 按钮,如果我切换,我想在 NSObject 类文件中使用它。

当从视图控制器(UIView)打开开关时,动作必须在 NSObject 类文件中工作。

我正在使用 Objective-C 进行编码。

这是我的 ViewController.m,我只在 ViewController 文件中执行此操作。未连接到 NSOBject 类文件。

- (void)viewDidLoad{

[super viewDidLoad];

//UISwitch work at viewDidload

[self.mySwitch addTarget:self
                  action:@selector(stateChanged:) forControlEvents:UIControlEventValueChanged]; }


- (void)stateChanged:(UISwitch *)switchState{

NSLog(@"current calendar: %@", [[NSCalendar currentCalendar] calendarIdentifier]);
//get the date today
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setCalendar:[NSCalendar currentCalendar]];
NSString *dateToday = [formatter stringFromDate:[NSDate date]];
NSLog(@"Today Date is: %@", [NSDate date]);
self.myLabel.text=dateToday;

if ([switchState isOn]) {

    //[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US@calendar=japanese"]];
    [formatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierJapanese]];

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSString *dateToday = [formatter stringFromDate:[NSDate date]];

    UILabel *dtDate = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320.0f, 20.0f)];
    [dtDate setText:dateToday];

    self.myLabel.text =dateToday;
    NSString *locale = [[NSLocale currentLocale] localeIdentifier];
    NSLog(@"current date is: %@", dateToday);
    NSLog(@"current locale: %@", locale);

} else {

    //[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
    [formatter setCalendar:[NSCalendar autoupdatingCurrentCalendar]];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSString *dateToday = [formatter stringFromDate:[NSDate date]];

    UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320.0f, 20.0f)];
    [myLabel setText:dateToday];

    self.myLabel.text =dateToday;
    //        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //        [formatter setDateStyle:NSDateFormatterMediumStyle];
    NSString *locale = [[NSLocale currentLocale] localeIdentifier];
    NSLog(@"current locale: %@", locale);
    NSLog(@"%@", [formatter stringFromDate: [NSDate date]]);
   }
}

【问题讨论】:

    标签: ios objective-c iphone uiviewcontroller


    【解决方案1】:

    如果您只需要一个操作,则使用类方法,否则当您从开关回调时,在 NSObject 扩展类中创建一个全局变量或通知观察者。

    - (void)callback:(id)sender
     {
         [MyObject switchState:sender.state];
     }
    

    【讨论】:

    • 我按你说的用了。但发现错误。我在 NSObject 类文件中使用它作为 - (void)callback:(id)sender { [NSObject switchState:sender.state];然后错误显示为 - Property state note found on object of type __strong id 感谢您的回答。能否请您详细说明。我只是 iOS 的初学者。
    • 创建一个从 NSObject 扩展的新类,在其中添加开关状态类方法。
    • 如果您只是需要触发 NSObject 类中的操作,请将 self.mySwitch 的 addTarget 设置为您的 NSObject 子类的对象并在该 NSObject 子类中定义 stateChanged: 方法。
    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多