Вандад Нахавандипур

iOS. Приемы программирования


Скачать книгу

iPhone. */

      }

      }

      – (void)viewDidLoad{

      [super viewDidLoad];

      self.contentSizeForViewInPopover = CGSizeMake(200.0f, 125.0f);

      CGRect buttonRect = CGRectMake(20.0f,

      20.0f,

      160.0f,

      37.0f);

      self.buttonPhoto = [UIButton buttonWithType: UIButtonTypeRoundedRect];

      [self.buttonPhoto setTitle:@"Photo"

      forState: UIControlStateNormal];

      [self.buttonPhoto addTarget: self

      action:@selector(gotoAppleWebsite:)

      forControlEvents: UIControlEventTouchUpInside];

      self.buttonPhoto.frame = buttonRect;

      [self.view addSubview: self.buttonPhoto];

      buttonRect.origin.y += 50.0f;

      self.buttonAudio = [UIButton buttonWithType: UIButtonTypeRoundedRect];

      [self.buttonAudio setTitle:@"Audio"

      forState: UIControlStateNormal];

      [self.buttonAudio addTarget: self

      action:@selector(gotoAppleStoreWebsite:)

      forControlEvents: UIControlEventTouchUpInside];

      self.buttonAudio.frame = buttonRect;

      [self.view addSubview: self.buttonAudio];

      }

      Теперь в методе viewDidLoad корневого контроллера вида создадим навигационную кнопку. В зависимости от типа устройства при нажатии навигационной кнопки мы будем отображать либо вспомогательный экран (на iPad), либо предупреждающий вид (на iPhone):

      – (void)viewDidLoad{

      [super viewDidLoad];

      /* Проверяем, существует ли этот класс в том варианте iOS,

      где действует приложение. */

      Class popoverClass = NSClassFromString(@"UIPopoverController");

      if (popoverClass!= nil &&

      UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){

      PopoverContentViewController *content =

      [[PopoverContentViewController alloc] initWithNibName: nil

      bundle: nil];

      self.popoverController = [[UIPopoverController alloc]

      initWithContentViewController: content];

      content.popoverController = self.popoverController;

      self.barButtonAdd = [[UIBarButtonItem alloc]

      initWithBarButtonSystemItem: UIBarButtonSystemItemAdd

      target: self

      action:@selector(performAddWithPopover:)];

      } else {

      self.barButtonAdd = [[UIBarButtonItem alloc]

      initWithBarButtonSystemItem: UIBarButtonSystemItemAdd

      target: self

      action:@selector(performAddWithAlertView:)];

      }

      [self.navigationItem setRightBarButtonItem: self.barButtonAdd

      animated: NO];

      }

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

      Мы решили, что при нажатии навигационной кнопки + на устройстве iPad будет запускаться метод performAddWithPopover:. Если мы имеем дело не с iPad, то нужно, чтобы при нажатии этой кнопки запускался метод performAddWithAlertView:. Итак, реализуем два этих метода, а также позаботимся о методах делегатов предупреждающего вида – чтобы нам было известно, какую кнопку в предупреждающем виде нажимает пользователь, работающий с iPhone:

      – (NSString *) photoButtonTitle{

      return @"Photo";

      }

      – (NSString *) audioButtonTitle{

      return @"Audio";

      }

      – (void) alertView:(UIAlertView *)alertView

      didDismissWithButtonIndex:(NSInteger)buttonIndex{

      NSString *buttonTitle = [alertView buttonTitleAtIndex: buttonIndex];

      if ([buttonTitle isEqualToString: [self photoButtonTitle]]){

      /* Добавляем фотографию… */

      }

      else if ([buttonTitle isEqualToString: