Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UIAlertViewDelegate clickedButtonAtIndex 
V
    Опции темы
xTr1m
Дата 11.1.2014, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Вопрос конечно детский, но я не понимаю =)) Вот объявление метода из протокола UIAlertViewDelegate
Код

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}


почему оно такое странное? если рассматривать это как обычный метод класса, то получается, что возвращается void, название alertView, первый параметр UIAlertView, второй NSInteger. Но ведь это не так, потому что название метода clickedButtonAtIndex. А это магичесоке alertView в начале, что оно обозначает. Вроде читал про методы класса в инете, но так и не понял в чем тут магия 
PM MAIL WWW ICQ   Вверх
Bitter
Дата 11.1.2014, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Все немного не так, метод возвращает void, а вот имя его alertView:clickedButtonAtIndex: и метод имеет два параметра alertView и buttonIndex
В обж-си (как и в SmallTalk от которого он унаследовал синтаксис) принято в имени метода указывать назначение входящих параметров, для того чтобы смысл метода был понятен без комментариев.
В данном случае имя метода указывает что первый параметр это алерт, который вызывает этот метод, а второй параметр говорит нам что "нажата кнопка с индексом" и передается индекс кнопки.
PM MAIL ICQ Skype   Вверх
Shklyar
Дата 11.1.2014, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 28.11.2007
Где: Kyiv

Репутация: нет
Всего: 3



Скорее, название: alertView clickedButtonAtIndex.

Данный метод делегата будет выполнен по клику на какую-то кнопку на UIAlertView. Однако контролер может содержать несколько UIAlertView и для всех реализовать один метод делегата. Так, если передать в метод alertView (по которому кликнули) и buttonIndex, то можно что-то конкретное сделать.
--------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U
PM WWW   Вверх
xTr1m
Дата 11.1.2014, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



про описание параметров в названии метода это я понял. но вот как я представлял должен выглядеть объявление
Код

- (void) clickedButtonAtIndex: (UIAlertView *)alertView  buttonAtIndex:(NSInteger)buttonIndex
{
}

то есть
1) возвращаемое значение
2) название метода
3) первый параметр alertView
4) второй параметр  buttonIndex

а тут получается (название метода, как я его понимаю, выделено жирным)
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}
что название метода находится между двумя параметрами. я знаю, что такая запись правильная и что я не прав. но мне хочется уяснить причину =))

Это сообщение отредактировал(а) xTr1m - 11.1.2014, 12:46
PM MAIL WWW ICQ   Вверх
Shklyar
Дата 11.1.2014, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 28.11.2007
Где: Kyiv

Репутация: нет
Всего: 3



Код

- (void) clickedAlertView: (UIAlertView *)alertView  buttonWithIndex:(NSInteger)buttonIndex
{
}


Или так!?
Однако, наше дело за малым - понять/знать о чем речь и использовать.
--------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U
PM WWW   Вверх
xTr1m
Дата 11.1.2014, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



попробую еще так. в этом объявлении мне не понятно следующее

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}

насколько я понимаю - это первый параметр или объект, для которого вызывается метод. но почему он идет до названия метода? ведь сначала название метода, а потом описание параметров
PM MAIL WWW ICQ   Вверх
Shklyar
Дата 11.1.2014, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 28.11.2007
Где: Kyiv

Репутация: нет
Всего: 3



Возможно, но не уверен, тут сиграла роль иерархия View-Button. И еще: название метода это все его слова (и alertView и clickedButtonAtIndex). А описание параметров, оно в названии метода. Т.е. нельзя сказать что описание параметров до или после названия метода. Ну, я это так понимаю.
--------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U
PM WWW   Вверх
xTr1m
Дата 11.1.2014, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



ну ведь не может быть такого балагана. в том смысле, что название метода может идти в начале, а может в середине, а может вообще в конце? ведь какая то определенность должна быть? то есть как определить именно название тогда, а если там три параметра два из которых clickedButtonAtIndex:index и clickedButton:button. как мы тогда поймем, что из этого именно метод?

Это сообщение отредактировал(а) xTr1m - 11.1.2014, 15:26
PM MAIL WWW ICQ   Вверх
Bitter
Дата 11.1.2014, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Вы все неправильно говорите.
Название метода не alertView clickedButtonAtIndex и тем более не clickedButtonAtIndex
Название метода alertView:clickedButtonAtIndex: Двоеточия входят в название метода!
Еще раз, название метода в обж си это не просто его имя, этот составное имя, включающее описание входящих параметров и смысла метода. Грубо говоря перевести его можно как "у alretView(указывается какого именно alertView) была нажата кнопка с индексом(указывается какой индекс)"

Метод не может быть объявлен так
Код

- (void) {
    
}

Но он может быть объявлен так
Код

- (void):(int)parametr {
    
}

тут двоеточие это имя метода, а parametr это параметр. Вызов такого метода будет выглядеть так
Код

    [self :1];


xTr1m, ваш вариант
- (void) clickedButtonAtIndex: (UIAlertView *)alertView  buttonAtIndex:(NSInteger)buttonIndex

неправильный, так как не указывает что идет первым параметром. Например вы написали такой метод, а я пытаюсь его вызвать:
[self clickedButtonAtIndex:0 buttonAtIndex:??];
как видите я не понял, что именно надо передавать вторым параметром, и меня вообще сбило с толку что вы просите на вход индекс два раза.

Цитата(xTr1m @  11.1.2014,  13:18 Найти цитируемый пост)
Ведь сначала название метода, а потом описание параметров

забудьте это, так как это постулат с++, но не обж-си. В обж-си он неправильный, тут имя метода и описание параметров это одно и то же

Вот вам метод из трех параметров
- (NSMutableArray *)loadAnimationName:(NSString *)name frames:(int)frames ipad:(BOOL)ipad
NSMutableArray * - то что возвращает метод
loadAnimationName:frames:ipad: - имя метода
loadAnimationName:(NSString *)name - первый параметр
frames:(int)frames - второй параметр
ipad:(BOOL)ipad - третий параметр

Это сообщение отредактировал(а) Bitter - 11.1.2014, 21:54
PM MAIL ICQ Skype   Вверх
Shklyar
Дата 11.1.2014, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 28.11.2007
Где: Kyiv

Репутация: нет
Всего: 3



Это удивительно, что двоеточия входят в названия метода. А можно ли создать метод с двоеточием в виде имени, но без параметра?

Это сообщение отредактировал(а) Shklyar - 11.1.2014, 23:54
--------------------
https://www.youtube.com/watch?v=JZN8Xaebs_U
PM WWW   Вверх
Bitter
Дата 12.1.2014, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



smile так нельзя, потому что двоеточие говорит о наличии переменной
PM MAIL ICQ Skype   Вверх
xTr1m
Дата 12.1.2014, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



bitter, то есть вот этот метод 
Код

- (NSMutableArray *)loadAnimationName:(NSString *)name frames:(int)frames ipad:(BOOL)ipad

будет вызываться так?
Код

NSString *str = @"some text";
[str loadAnimationName 0 YES];

то есть первый параметр это как бы тип объекта, для которого можно вызвать метод?

p.s. нет, все же наверное. 
Код

[self loadAnimationName str 0 YES]

но тогда как бы вызывался вот этот метод
Код

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}

я не могу представить его вызов =))

 p.p.s. но попробую
Код

// self = alerView class;
[self :0];


Это сообщение отредактировал(а) xTr1m - 12.1.2014, 08:34
PM MAIL WWW ICQ   Вверх
xTr1m
Дата 12.1.2014, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



После 7 лет программирования на c++ конечно мозг изрядно зацементировался =)) то есть получается, что в таком определении 
Код

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}

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

- (void)show

тут ведь имя метода присутствует в явном виде. ох, мой мозг взрывается =))
PM MAIL WWW ICQ   Вверх
Bitter
Дата 12.1.2014, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Цитата(xTr1m @  12.1.2014,  08:06 Найти цитируемый пост)
[self loadAnimationName str 0 YES]

нет, вызываться он будет не так конечно же, а так
Код

[self loadAnimationName:str frames:0 ipad:YES]


Ну что тут трудного я не понимаю, имя разбито на три куска, между этими кусками параметры, вот и всё.
"Кабы имени нет" это не правильно. И в первом и во втором случае имя есть. В первом имя метода alertView:clickedButtonAtIndex: во втором случае имя show
В первом случае метод вызывается [delegate alertView:self clickedButtonAtIndex:0], во втором просто [alertView show]

P.S. c++ вам сильно мешает в изучении. Для дальнейшего изучения вам надо забыть с++, так как ничего из с++ обж-си не использует, это другая ветка развития языка Си
PM MAIL ICQ Skype   Вверх
xTr1m
Дата 12.1.2014, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Спасибо, кажется, я стал немного понимать. Очень смущало то, что в этом методе
Код

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}

который подразумевает вызов при клике на кнопке само название идет как второй параметр. теперь я понимаю, что название это все вместе. Долгая работа с c++ действительно мешает, но именно по этой причине я решил взяться за другой язык (хотя бы немного похожий на с, чтобы было проще) представляю, что было бы, если взялся за какой-нибудь  haskell =))
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | iOS | Следующая тема »


 




[ Время генерации скрипта: 0.1619 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.