список всех методов контроля - как требуется - iPhone - PullRequest
0 голосов
/ 30 августа 2009

вчера я только что задал следующий вопрос.


Как настроить табличный вид в разрезе - iPhone
Я нашел какой-то новый метод.

Даже в документации Apple я не нашел этот метод.

Это что-то вроде скрытых методов?

Кто-нибудь предоставляет список всех методов? Включая образец кода.

Скажем, например. Методы UITableView

Всякий раз, когда я вставляю tableView в свой контроллер View.

Я должен либо напечатать, либо скопировать откуда-нибудь.

Если я хочу включить сборщик, я должен выяснить методы UIPicker, так же Alertview, ActionSheet, контроллер панели вкладок имеют разные методы.

Разве это невозможно, как если бы мы включили tableView в наш ViewController, автоматически все методы tableview добавляются в файл .m.

(Например, приложение на основе навигации по умолчанию имеет все методы tableView в контроллере rootview)

Позвольте мне еще раз уточнить,

"Мне нужен правильный источник, где все методы (например, контроллер rootview имеет почти все методы таблицы)"

Итак, когда я хочу добавить какой-либо элемент управления, я просто копирую код и добавляю в свой проект.

причина этого «Мы можем нацеливаться на работу вместо того, чтобы находить правильные методы и печатать их».

См. Предположим, если я добавлю табличное представление в мой контроллер представления, у меня должны быть такие методы, как ..didSelectAtRow .., .. CellForRow ... и т. Д.

Итак, после добавления tableView - для управления табличным представлением, мне нужно найти методы и ввести их в мой файл .m.

Предположим, я добавляю tableView. Все методы должны быть добавлены в мой файл .m, как указано ниже.

<pre>

Прагма Марк Методы табличного представления

- (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView { возврат 1; }

- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) раздел { вернуть 0; }

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
статическая NSString * CellIdentifier = @ "Cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier] autorelease]; } возвратная ячейка; } // Переопределить для поддержки выбора строки в табличном представлении. - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { // Здесь может идти логика навигации - например, создать и нажать другой контроллер вида. // AnotherViewController * anotherViewController = [[AnotherViewController alloc] initWithNibName: @ "AnotherView" bundle: nil]; // [self.navigationController pushViewController: anotherViewController animated: YES]; // [anotherViewController release]; }

// Переопределить для поддержки условного редактирования табличного представления. - (BOOL) tableView: (UITableView *) tableView canEditRowAtIndexPath: (NSIndexPath *) indexPath { // Возвращаем NO, если вы не хотите, чтобы указанный элемент был редактируемым. вернуть ДА; }

// Переопределить для поддержки редактирования табличного представления. - (void) tableView: (UITableView *) tableView commitEditingStyle: (UITableViewCellEditingStyle) editStyle forRowAtIndexPath: (NSIndexPath *) indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {
    // Delete the row from the data source.
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}   
else if (editingStyle == UITableViewCellEditingStyleInsert) {
    // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}   

}

// Переопределить для поддержки переупорядочения представления таблицы. - (void) tableView: (UITableView *) tableView moveRowAtIndexPath: (NSIndexPath *) fromIndexPath toIndexPath: (NSIndexPath *) toIndexPath { }

// Переопределить для поддержки условного переупорядочения представления таблицы. - (BOOL) tableView: (UITableView *) tableView canMoveRowAtIndexPath: (NSIndexPath *) indexPath { // Вернуть NO, если вы не хотите, чтобы элемент был переупорядочен. вернуть ДА; }

Ответы [ 3 ]

2 голосов
/ 30 августа 2009

Я дал ответ на вопрос, который вы упомянули - он определенно есть в документации Apple (хотя, как вы говорите, не в файле примера). Помните, что имя метода

tableview:didSelectRowAtIndexPath

если вы пропустите бит "tableview:" в начале и просто выполните поиск

didSelectRowAtIndexPath

вы не найдете его в документации так легко.

Если вы посмотрите в документации, поставляемой с XCode, вы увидите, например, все методы, которые вы можете реализовать для делегата UITableview, включая тот, который я опубликовал в вашем предыдущем ответе. Просто введите «UITableview» в справку XCode, а затем выберите «UITableview делегат». Затем он отобразит все методы, доступные для вызова, и вы даже можете просто скопировать и вставить их прямо в код.

Я не знаю, сделал ли кто-нибудь это и сделал ли "шаблонные" классы, о которых вы спрашиваете, доступными, но вам будет очень легко сделать это самостоятельно, если вы хотите.

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

1 голос
/ 30 августа 2009

Методы, которые вы описываете, находятся в документации. Они находятся в UITableViewDelegate и UITableViewDataSource , которые описаны в верхней части UITableView документации. Вы можете легко скопировать и вставить нужные определения методов из документации. Вы также можете легко найти определение протокола в заголовках, используя «Файл> Открыть быстро ...» и введя имя протокола (например, «UITableViewDelegate»). Они часто пишутся в заголовках, чтобы было проще скопировать и вставить то, что вам нужно чаще всего.

Это иногда небольшая проблема в Какао, потому что Xcode не выполняет автозаполнение сигнатур методов. Это спасло бы немного неприятностей, если бы это сделало. Но решение не в том, чтобы реализовать каждый существующий метод делегата (как указывалось ранее в @bbum). В подавляющем большинстве случаев только небольшая часть возможных методов делегатов когда-либо реализована. Таким образом, автоматическое заполнение их всех приведет к гораздо большему количеству работы, чем сэкономлено.

1 голос
/ 30 августа 2009

Конечно; Разработчики классов могут свободно реализовывать любое количество методов как часть внутренней реализации класса.

Но это не значит, что вы должны их использовать.

Вы можете использовать API среды выполнения Objective C для определения всех методов и классов, включая те, которые не объявлены публично.

Но не беспокойся.

В частности, если метод не объявлен в предоставленных заголовочных файлах и не задокументирован в документации, не используйте его. Использование такого метода приведет к хрупкости и головной боли от обслуживания; Ваше приложение может сломаться при следующем обновлении программного обеспечения.

На iPhone вы прямо не должны использовать частные интерфейсы, и в этом случае ваше приложение будет подвергнуто риску отклонения.

Но я не думаю, что это то, о чем вы действительно спрашиваете. Вы упоминаете:

Скажем, например. Методы UITableView включает в себя

didSelectRowAtIndexPath cellForRowAtIndex Path numberOfSectionsInTableView titleForHeaderInSection

Однако UITableView не объявляет ни один из этих методов. Вместо этого он объявляет:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

Или, кратко, tableView:didSelectRowAtIndexPath: и т. Д. *

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