UISwitch в первом виде и метка во втором - PullRequest
0 голосов
/ 11 сентября 2011

Итак, я хочу разместить метку в моем виде в кулак и поместить во второй переключатель UIS. Но проблема в том, что я не могу связать все вместе ..: /

на мой первый взгляд, у меня есть

- (void)onRoff {

    if (mySwitch1.on) {

        test.hidden = YES;
    }
    else (test.hidden = NO);

}

но здесь у меня ошибка с mySwitch1, потому что она объявлена ​​в моем втором окне .. Я не знаю, ясно ли это, я хочу связать метку и переключатель в другом представлении ..

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 сентября 2011

Итак, вы объявили ur UISwitch во втором представлении и метку ur в первом представлении.Все, что вам нужно сделать, это просто использовать NSUserDefaults для достижения желаемого.Имейте следующий метод в самом втором представлении.Не доводите это до первого взгляда.

- (void)onRoff {

   if (mySwitch1.on) {
    [[NSUserDefaults standarduserdefaults]setObject:@"off" forKey:@"state"];
    [[NSUserDefaults standarduserdefaults]synchronize];
   }
   else {
     [[NSUserDefaults standarduserdefaults]setObject:@"on" forKey:@"state"];
     [[NSUserDefaults standarduserdefaults]synchronize];
   }

}

Теперь в методе viewWillAppear первого представления просто проверьте значение NSUserDefaults.

-(void)chkState{
NSString *tempStr=[[NSUserDefaults standarduserdefaults]objectForKey:@"state"];
   if([tempStr isEqualTo:@"on"]) {
      test.hidden=YES;
   }
   else {
      test.hidden=NO;
   }
}

Вызовите этот метод в viewWillAppear первого просмотра, как это .... [self chkState];

Надеюсь, это поможет .... Если вы тоже хотите сохранить состояние коммутатора, просто снова проверьте значение userdefaults в методе viewWilAppear 2-го представления на основе

1 голос
/ 11 сентября 2011

На самом деле вы не очень ясны. Первое, что вы можете попробовать, это описать, что вы сделали:

  • как создаются ваши два взгляда?

Предположим, что ваши два представления созданы из двух разных файлов пера.

  • к какому объекту вы хотите иметь доступ к вашей метке и переключателю?

Давайте предположим, что это контроллер представления. Для одного контроллера представления немного необычно управлять двумя представлениями из двух разных файлов пера, но в конце концов, почему бы и нет?

В любом случае, вы можете установить класс владельца для ваших двух файлов пера в качестве класса вашего контроллера представления. Затем в Интерфейсном Разработчике, с первого взгляда, вы можете привязать метку к выходному файлу владельца UILabel. А в Интерфейсном Разработчике, из второго представления, вы можете привязать UISwitch ко второму выходу владельца файла типа UISwitch.

Но, возможно, ваши onRoff методы на самом деле являются методами одного из ваших двух классов представления? Применима та же идея: вы можете установить владельца файла во втором файле пера в качестве класса представления первого представления, а затем привязать переключатель к выходу UISwitch владельца файла.

Но, похоже, ваш дизайн стоит того, чтобы над ним работать ...

Редактировать: после вашего комментария, здесь немного больше ...

Проблема в том, что каждый из двух контроллеров представления контролирует свою страницу и не имеет оснований знать друг о друге. Итак, вам нужен объект среднего человека. Это может быть другой контроллер. Давайте использовать делегат приложения. Затем в методе IBAction вашего SwitchViewController вы можете сделать что-то вроде:

- (IBAction) switchChangedValue:(UISwitch *) sender {
  NSString *newLabelText = sender.isOn ? @"On" : @"Off";
  self.labelViewController.label.text = newLabelText;
}

Теперь, как все узнают друг о друге? Сначала каждый контроллер представления проинформирует посредника. Вот это для SwitchViewController:

- (void) viewDidLoad
{
  [super viewDidLoad];
  MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
  appDelegate.switchViewController = self;
}

Во-вторых, делегату приложения нужно будет все координировать:

@interface MyAppDelegate : …
@property (nonatomic, retain) SwitchViewController *switchViewController;
@property (nonatomic, retain) LabelViewController *labelViewController;
@end

@implementation MyAppDelegate

@synthesize switchViewController = _switchViewController;
@synthesize labelViewController = _labelViewController;

- (void) setSwitchViewController:(SwitchViewController *) newSwitchController {
  if (newSwitchController != _switchViewController) {
    [_switchViewController release];
    _switchViewController = [newSwitchController retain];
    _switchViewController.labelViewController = _labelViewController;
    if (_labelViewController)
      _labelViewController.label.text = _switchViewController.switch.isOn ? @"On" : @"Off";
  }
}

- (void) setLabelViewController:(LabelViewController *) newLabelController {
  if (newLabelController != _labelViewController) {
    [_labelViewController release];
    _labelViewController = [newLabelController retain];
    _labelViewController.switchViewController = _switchViewController;
    if (_switchViewController)
      _labelViewController.label.text = _switchViewController.switch.isOn ? @"On" : @"Off";
  }
}

Я пропустил ряд деталей, но я надеюсь, что общая картина ясна.

...