Я только начинаю Objective-C и разрабатываю приложение для iPhone. Мне нужна помощь с Objective-C - PullRequest
1 голос
/ 23 февраля 2011

Мне 14 лет, и я разрабатываю второе приложение для iOS: версию интернет-чата для iPhone, которую я создал для своей школы.У меня очень мало знаний о Objective-C, и мне нужна помощь.Это очень простое приложение, в котором у меня есть UIWebView и панель инструментов в нижней части представления.Панель инструментов содержит текстовое поле и кнопку «Отправить».У меня UIWebView работает и указывает на правильный сайт, но мне нужны две основные вещи:

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

и

2. Мне нужно найти способ публикации содержимого моего текстового поля в моем PHPсценарий онлайн, когда нажата кнопка «Отправить» или нажата клавиша «Отправить» на клавиатуре.

Любая помощь будет принята с благодарностью!

Редактировать: ЗдесьВот некоторые скриншоты приложения.

Скриншоты приложения .

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Множество вопросов, чтобы ответить здесь!

Перестановка панели инструментов

Чтобы изменить положение панели инструментов, вам нужно сделать несколько вещей:

  • Получайте уведомления, когда пользователь начинает использовать его
  • Измените размер вашего веб-просмотра и переместите панель инструментов

Чтобы получать уведомления, когда пользователь нажимает на ваше текстовое поле, вам понадобитсяto:

  • Реализация протокола UITextFieldDelegate в вашем контроллере (скорее всего, контроллер основного вида).
  • Реализация метода делегата -textFieldDidBeginEditing:.
  • Setваш объект контроллера как делегат текстового поля.
  • Ссылка UITextFieldDelegateProtocol должна объяснить это.

Чтобы изменить размеры элементов управления, вам нужно будет объявить их как IBOutlets иподключите их в интерфейсе конструктора.Лучше всего для этого прочитать Руководство по быстрому запуску Interface Builder .

Отправка данных

Отправка данных будетнемного сложнее.Несколько вещей, которые вы можете сделать:

  • Обман и отправка данных в виде данных «GET» с помощью метода, подобного NSString -initWithContentsOfURL: (что-то вроде этого:)

    NSString *chatString = [textField stringValue]; //get the chat string
    NSString *encodedString = [chatString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; //URL-encode any special characters
    NSString *urlToRequest = [NSString stringWithFormat:@"http://mysite.com/chat.php?message=%@", encodedString];
    NSURL *requestURL = [NSURL URLWithString:urlToRequest];
    NSString *urlResult = [NSString stringWithContentsOfURL:requestURL];
    

Делая это таким образом, вы сможете получить сообщение в своем PHP-скрипте следующим образом:

    $encoded_message = $_GET['message'];
    $message = urldecode($encoded_message);

Это не самый надежный способно для проекта средней школы это, вероятно, будет хорошо.

Более надежный способ сделать это - использовать библиотеки какао, предназначенные для этого.Я не буду углубляться в эти детали, поскольку они довольно сложны, и собственная документация Apple для разработчиков намного лучше объясняет это: Руководство по программированию системы загрузки URL

Редактировать: согласно Hack Saw'sпост, используя NSNotification, чтобы определить, когда клавиатура будет показывать лучше.Выполняя действия делегата, как я описал, вы будете уведомлены, только если , что выбрано определенное текстовое поле.Документацию по управлению клавиатурой можно найти здесь: Текст, Интернет и Руководство по программированию для iOS

1 голос
/ 23 февраля 2011

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

Сначала вам нужно зарегистрироваться для уведомлений клавиатуры

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

, а затем переместить панель инструментов вверх.Как это.

- (void)keyboardWillShow:(NSNotification *)notification {
    if (keyboardShown) {
        return;
    }
    NSDictionary* info = [notification userInfo];

    // Get the size of the keyboard.
    NSValue* aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    CGRect currentFrame = self.toolbar.frame;
    currentFrame.origin.y = currentFrame.origin.y - keyboardSize.height;

    [UIView beginAnimations:@"ShowKeyboard" context:NULL];
    [UIView setAnimationCurve:[[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
    [UIView setAnimationDuration:[[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
    self.toolbar.frame = currentFrame;
    [UIView commitAnimations];

    keyboardShown = YES;
}

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

Чтобы сделать вещинемного проще, вы можете сделать панель инструментов и веб-представление подпредставлениями в виде «контента».После этого вы измените высоту содержимого содержимого, а остальное позаботится авторазмер.

Да, и вам не следует изменять размер представления только из-за textFieldDidBeginEditing:.Я не знаю для iphone, но есть возможность подключить внешнюю клавиатуру к Ipad.И вы изменили бы размер вида, не показывая клавиатуру, оставив большую пустую рамку внизу.

1 голос
/ 23 февраля 2011

Вы захотите взглянуть на «Управление клавиатурой».

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

--- UPDATE ---

Осмотревшись немного, я нашла это:

Крышки клавиатуры iPhone UITextField

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