Доступ к элементам пользовательского интерфейса, созданным в Интерфейсном Разработчике в контроллере? - PullRequest
3 голосов
/ 21 июля 2009

Это очень простой вопрос iPhone / Какао. У меня есть кнопка, которая переключается между двумя видами. Я установил большую часть этого с помощью конструктора интерфейса. Когда я нажимаю кнопку и отображается второй вид, как мне программно изменить текст кнопки (например, «назад»)?

Ответы [ 5 ]

10 голосов
/ 21 июля 2009

В объявлении класса объявите объект кнопки и убедитесь, что он указан как IBOutlet:

IBOutlet UIButton* myButton;

После сохранения этого изменения, если вы вернетесь в Интерфейсный Разработчик, вы должны увидеть эту розетку, когда щелкнете правой кнопкой мыши по Владельцу вашего файла (при условии, что вы правильно указали Владельца файла). Свяжите эту розетку с экранной кнопкой UIB с помощью перетаскивания правой кнопкой мыши.

Теперь экранный объект связан с вашим именем в коде.

Везде, где вы хотите изменить текст на кнопке UIB, просто скажите:

[myButton setTitle:@"Back - or whatever else you want it to say" 
          forState: UIControlStateNormal ];
// you can set different title text for each state 
// of the button (selected, active, or normal)
4 голосов
/ 21 июля 2009

Кроме того, вы можете назначить уникальный тег для элемента управления и использовать -[UIView viewWithTag:], чтобы получить UIView указатель на элемент управления. В большинстве случаев розетки являются предпочтительным механизмом, но теги полезны для таких вещей, как ячейки таблицы.

2 голосов
/ 21 июля 2009

Большинство постов до сих пор были сосредоточены на создании кнопки, и они очень правильные. Следующее отвечает на остальную часть вопроса:

Когда я нажимаю кнопку и отображается второе представление, как мне программно изменить текст кнопки (например, «назад»)?

Самый простой способ, если я правильно понимаю ваши обстоятельства, - это использовать plug-n-play UINavigationBarController. Сначала вы хотите поместить свой второй контроллер представления в стек просмотра:

// In firstViewController.m
self.navigationController = [[UIViewController alloc]initWithNibName:@"secondView" bundle:nil];
[self pushViewController:secondViewController animated:TRUE];

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

// In secondViewController.m
-(void)ViewWillAppear
{
  [self.navigationItem.backBarButtonItem setText:@"GoBack"];
}

Есть также left и rightBarButtonItem (s), которые удобны для более сложной навигации. Вот менее сценарий plug-n-play:

// In secondViewController.h
-(IBAction)goBack; (this should appear as an action in your associated nib file)

// In secondViewController.m
-(void)viewDidLoad
{
  self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"GoBack" style:UIBarButtonItemStylePlain target:self action:@selector(goBack)];
}

-(IBAction)goBack
{
  // logic to be done before going back
  [self popViewControllerAnimated:secondViewController animated:TRUE];
}
2 голосов
/ 21 июля 2009

Вам нужно настроить выход для IB:

@interface MyViewController : UIViewController {
    IBOutlet UIButton *myButton;
}

Сохраните, вызовите IB, установите владельца файла на MyViewController, затем создайте ссылки на выходы из UIView и UIButton в соответствующие точки в владельце файла в Инспекторе соединений.

Тогда в реализации вы можете сделать:

[myButton setTitle:@"Back" forState:UIControlStateNormal];

Если вы потеряли связь, я бы порекомендовал взглянуть на конспекты лекций и видеолекции по номеру http://www.stanford.edu/class/cs193p/cgi-bin/index.php, в которых подробно рассматриваются основы iPhone.

Надеюсь, это поможет.

0 голосов
/ 21 июля 2009

Необходимо определить и подключить «розетку». Взгляните на документацию , отметив раздел «Соединения и привязки».

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