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

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


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

пользоваться только системными возможностями совместного использования.

      Итак, допустим, что у нас есть текстовое поле, где пользователь может ввести текст, который затем будет использоваться совместно. Рядом с этим полем будет находиться кнопка Share (Поделиться). Когда пользователь нажимает кнопку Share, вы просто передаете текст, находящийся в текстовом поле, вашему экземпляру класса UIActivityViewController. Далее приведен соответствующий код. Мы пишем этот код для iPhone, поэтому представим контроллер вида с этой активностью как модальный контроллер вида.

      Поскольку мы помещаем в нашем контроллере вида текстовое поле, нам необходимо обеспечить обработку его делегатных сообщений, в особенности тех, что поступают от метода textFieldShouldReturn: из протокола UITextFieldDelegate. Следовательно, мы собираемся выбрать контроллер вида в качестве делегата текстового поля. Кроме того, прикрепим к кнопке Share (Поделиться) метод действия. Когда эта кнопка будет нажата, нам потребуется убедиться, что в текстовом поле есть какая-то информация, которой можно поделиться. Если ее там не окажется, мы просто отобразим для пользователя окно с предупреждением, в котором сообщим, что не можем предоставить содержимое текстового поля для совместного использования. Если в текстовом поле окажется какой-либо текст, мы выведем на экран экземпляр класса UIActivityViewController.

      Итак, начнем с файла реализации контроллера вида и определим компоненты пользовательского интерфейса:

      @interface ViewController () <UITextFieldDelegate>

      @property (nonatomic, strong) UITextField *textField;

      @property (nonatomic, strong) UIButton *buttonShare;

      @property (nonatomic, strong) UIActivityViewController *activityViewController;

      @end

      

      Затем напишем для контроллера вида два метода, каждый из которых будет способен создать один из компонентов пользовательского интерфейса и поместить этот компонент в окно контроллера вида. Один метод будет создавать текстовое поле, а другой – кнопку рядом с этим полем:

      – (void) createTextField{

      self.textField = [[UITextField alloc] initWithFrame: CGRectMake(20.0f,

      35.0f,

      280.0f,

      30.0f)];

      self.textField.translatesAutoresizingMaskIntoConstraints = NO;

      self.textField.borderStyle = UITextBorderStyleRoundedRect;

      self.textField.placeholder = @"Enter text to share…";

      self.textField.delegate = self;

      [self.view addSubview: self.textField];

      }

      – (void) createButton{

      self.buttonShare = [UIButton buttonWithType: UIButtonTypeRoundedRect];

      self.buttonShare.translatesAutoresizingMaskIntoConstraints = NO;

      self.buttonShare.frame = CGRectMake(20.0f, 80.0f, 280.0f, 44.0f);

      [self.buttonShare setTitle:@"Share" forState: UIControlStateNormal];

      [self.buttonShare addTarget: self

      action:@selector(handleShare:)

      forControlEvents: UIControlEventTouchUpInside];

      [self.view addSubview: self.buttonShare];

      }

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

      – (void)viewDidLoad{

      [super viewDidLoad];

      [self createTextField];

      [self createButton];

      }

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