Как я могу скрыть кнопку в другом контроллере представления? - PullRequest
2 голосов
/ 12 ноября 2011

Я использую этот код, чтобы скрыть кнопку в другом контроллере представления, но кнопка не скрывается при нажатии кнопки, чтобы скрыть кнопку в другом контроллере представления.

Это код, который я использую, чтобы скрыть кнопку в другом контроллере вида:

    [self dismissModalViewControllerAnimated:YES];

    NSLog(@"Exited");

    ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

    [vc.mainbutton1 setHidden:YES];

Почему это не работает?

Спасибо!

Ответы [ 5 ]

4 голосов
/ 12 ноября 2011

взять переменную BOOL в контроллере ViewController, создать свойство и также синтезировать. и сделай это.

ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
vc.check = YES;

в контроллере представления viewdidload написать это

if(self.check)
    [mainbutton1 set hidden:YES];
1 голос
/ 12 ноября 2011

Остальные ответы должны работать, если только ...

Судя по вашему коду, я догадываюсь, что вы пытаетесь скрыть кнопку в viewController, который представляет модальное представление?

Если это правильно, то то, что вы делаете, не будет работать, так как вы создаете новый экземпляр ViewController, который не является уже существующим viewController, который вы хотите использовать.

Хотя в документах говорится, что это нормальноПозвоните [self dismissModalViewControllerAnimated:YES]; из представленного модального представления. Я склонен настроить делегата для обработки отклонения, как в шаблоне приложения Apple для utitliy.

0 голосов
/ 12 ноября 2011

Кажется, вы хотите, чтобы определенная кнопка была скрыта, если что-то происходило где-то еще.

Вы МОЖЕТЕ, как хак (но я не очень-то возражаю) контролировать это, например, с помощью переменной в вашем AppDelegate.

Когда «что-то» происходит «где-то еще», сделайте это:

MyAppDelegate *appDelegate = [[(MyAppDelegate *)UIApplication sharedApplication] delegate];
appDelegate.shouldHideThatOtherButtonLater = YES;

Затем, когда вы позже создадите новый ViewController, вы можете использовать это значение, чтобы определить, должна ли ваша кнопка быть видимой или нет:

ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

MyAppDelegate *appDelegate = [[(MyAppDelegate *)UIApplication sharedApplication] delegate];
[vc.mainbutton1 setHidden: appDelegate.shouldHideThatOtherButtonLater ];

В этом случае вам придется подготовить свой AppDelegate для этого путем создания и синтеза свойства shouldHideThatOtherButtonLater.

0 голосов
/ 12 ноября 2011

По вашему вопросу звучит так, как будто вы хотите скрыть кнопку в существующем контроллере представления, тогда как в своем коде вы создаете новый

ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
[vc.mainbutton1 setHidden:YES];

Либо контроллер вида, который вы наблюдаете, не тот, который вы ожидаете, или розетка основной кнопки1 не подключена должным образом. Вы можете проверить, является ли контроллер памяти тем, который вы ожидаете, зарегистрировав его адрес памяти.

NSLog(@"Hid button for view controller %p", vc);

И делает то же самое в обратном вызове viewDidAppear ViewController

NSLog(@"In viewDidAppear for view controller %p", self);
0 голосов
/ 12 ноября 2011

Причина, по которой это не работает, заключается в том, что даже если вы правильно выполнилиоритирование и инициализацию ViewController, фактические элементы этого vc ViewController (включая mainbutton1) еще не были загружены.

У Хитмана есть правильная идея (и я голосую за его идею).

Либо добавьте свойство BOOL для установки mainButton1 скрытым при отображении представления, либо вызовите [mainButton1 setHidden: YES] вправо после , чтобы вы явно отобразили представление (посредством анимации или добавления подпредставлений или что угодно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...