Понимание делегатов в UITableView и UITableViewController - PullRequest
1 голос
/ 19 января 2011

Я изучаю, как использовать UITableView и UITableViewController в iOS, и я думаю, что, возможно, я запутался. Я создал простой TableView, и у меня есть 2 раздела. Ничего сложного.

Я определил следующее, и он прекрасно работает:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section
{
    // Section is going to be either 0 or 1, high or low
    if (section == 0) {
        return 1;
    }
    else {
        return 2;
    }
}

Однако я не понимаю определения методов. Оба метода должны возвращать целое число, поэтому я понимаю начало (NSInteger). numberOfRowsInSection начинается с tableView: (UITableView *) tableView и я не понимаю, почему?

Я новичок в программировании iOS, так что будьте осторожны :-) Всех помогите с благодарностью.

Mike

Ответы [ 4 ]

1 голос
/ 19 января 2011

Имя метода - "tableView: numberOfRowsInSection:".Первый аргумент - это экземпляр UITableView, который запрашивает у источника данных количество строк в определенном разделе.Это полезное соглашение, поскольку у вас может быть один объект, выступающий в качестве источника данных для многих табличных представлений, или вы хотите каким-то образом обновить табличное представление при вызове метода делегата.Передавая вызывающий объект делегату, вам не нужно, чтобы делегат поддерживал дополнительную ссылку на этот объект.

Взгляните на методы делегата NSURLConnection, связанные с аутентификацией, для примера, где это действительно необходимо.

1 голос
/ 19 января 2011

tableView:(UITableView *)tableView полезно, если вам нужно знать , какой tableView отправил этот метод делегата.

0 голосов
/ 19 января 2011

Это соглашение Apple о присвоении имен для методов делегата и источника данных. numberOfSectionsInTableView: не имеет аргументов, кроме табличного представления, поэтому этот аргумент добавляется в конце. tableView: numberOfRowsInSection: принимает другой аргумент, индекс рассматриваемого раздела. Apple решила, что при наличии других аргументов вызывающий объект должен идти первым, а аргументы - после него.

0 голосов
/ 19 января 2011

Ознакомьтесь с описанием класса UITableViewController

- (NSInteger)tableView:(UITableView *)tableView 

Первая часть, NSInteger, сообщает, что вам нужно вернуть число return 1;, вторая часть (UITableView *)tableView, чтобы вы знали, что имеете дело с классом UITableView.

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