2015-07-27 6 views
0

У меня есть приложение с UITableView результатов в центральном столбце и небольшая панель поиска вверху. Я хочу динамически добавлять/удалять кнопку, которая говорит «сбросить поиск» и привязать ее к вершине представления.iOS: отображение/скрытие элементов пользовательского интерфейса динамически

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

  • Добавить кнопку в редакторе раскадровки и показать/скрыть ее в коде. Беда в том, что у меня уже есть куча просмотров, указанных таким образом в раскадровке, и поэтому позиционирование/выбор их - огромная боль, поскольку они перекрывают друг друга.

  • Добавить кнопку в код. Кроме того, мой пользовательский интерфейс указан в двух местах: материал, который находится в раскадровке, и дополнительные модификации, которые имеют место в коде.

Какой стандартный способ сделать что-то подобное? И как я могу предотвратить, что мои раскадровки становятся большим беспорядком, когда у меня есть кнопки/диалоги/и т. Д. которые должны быть динамически показаны/скрыты?

ответ

1

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

Если бы я был вами, я бы сделал вариант 2. Это единственная кнопка для этой единственной кнопки, и у нее есть конкретный вариант использования. Не стоит указывать его в коде. Ниже для

.h 
@property (nonatomic, strong) UIButton *resetButton; 

И

.m 
//I'm guessing you're using a VC, so I'd put this in viewDidLoad 

self.resetButton = [[UIButton alloc]initWithFrame:YOUR FRAME]; 
self.resetButton.alpha = 0.0; 
//any other styling 
[self.view addSubview:self.resetButton]; 
self.resetButton addTarget:self action:@selector(onReset) forControlEvents:UIControlEventTouchUpInside]; 

//and then add these three methods 

- (void)onReset { 
    //called when reset button is tapped 
} 

- (void)showResetButton { 
    [UIView animateWithDuration:.3 animations:^{ 
     self.resetButton.alpha = 1.0; 
    }]; 
} 

- (void)hideResetButton { 
    [UIView animateWithDuration:.3 animations:^{ 
     self.resetButton.alpha = 0.0; 
    }]; 
} 
+1

прозрачный не означает его скрытый бросок – meda

+0

Если альфа = 0, никаких событий касания не регистрируются. Он действует как скрытый. – AlexKoren

0

Я не знаю, если я понял, но если вы хотите, чтобы скрыть объект с действием, вы можете сделать так:

- (IBAction)myaction:(id)sender 
{ 
    self.object1.hidden = false ; 
    self.object2.hidden = true ; 
    self.object3.hidden = false ; 
} 
0

Оба пути являются совершенными, я лично предпочитаю раскадровки один, потому что это позволяет организовать кнопку более легко, и это проще добавить ограничения для авто-макета (если необходимо) в Interface Builder, чем в коде.

Для вашего второго вопроса: Если ваш раскадровка захламлена, а виды повсюду, я бы предложил вам выбрать свои виды из боковой панели, а спасибо, пытаясь щелкнуть по ним. Кроме того, если вы хотите переместить выбранный вид, отрегулируйте координаты на панели «Утилиты», а не перетаскивайте его мышью.

Смежные вопросы