Как эффективно использовать пользовательские UITableViewCell? - PullRequest
0 голосов
/ 11 мая 2011

В настоящее время я делаю пользовательскую ячейку UITableView, как показано ниже. Пользовательский UITableViewCell находится в своем собственном файле пера, который я вызываю из другого ViewController. (вроде так)

// RegistrationViewController.m

//Sets number of sections in the table
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
}

// Sets the number of rows in each section.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}

//Loads both Custom cells into each section
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    //Registration Cell
    static NSString *CellIdentifier = @"CustomRegCell";
    static NSString *CellNib = @"LogInCustomCell";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil];
        cell = (UITableViewCell *)[nib objectAtIndex:0];
    }

    //Registration Button
    static NSString *CellButtonIdentifier = @"CustomSubmitCell";
    static NSString *CellButtonNib = @"LogInSubmitButton";

    UITableViewCell *cellButton = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellButtonIdentifier];
    if (cellButton == nil) {
        NSArray *nibButton = [[NSBundle mainBundle] loadNibNamed:CellButtonNib owner:self options:nil];
        cellButton = (UITableViewCell *)[nibButton objectAtIndex:0];
    }

    if (indexPath.section == 0) {
        cell.selectionStyle = UITableViewCellSelectionStyleNone; //Stops the UITableViewCell from being selectable
        [self registrationControll];
        //TODO: call method that controls this cell
        return cell;    
    }
    if (indexPath.section == 1) {
        cellButton.selectionStyle = UITableViewCellSelectionStyleNone; //Stops the UITableViewCell from being selectable
        return cellButton;          
    }
    return nil; 
}

В нем есть четыре текстовых поля, которые я хочу ограничить размером строки, которую можно ввести, пятью. (Я пробовал пока только с первым текстовым полем, но он даже не вводит textField: shouldChangeCharactersInRange: replaceString: метод делегата (выяснил это при отладке приложения), вот код для части, которую я пытаюсь ограничить количество символов, которое можно ввести.

// RegistrationViewController.m

//textField:shouldChangeCharactersInRange:replacementString:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    int length = [regFieldOne.text length] ;
    if (length >= MAXLENGTH && ![string isEqualToString:@""]) {
        regFieldOne.text = [regFieldOne.text substringToIndex:MAXLENGTH];
        return NO;
    }
    return YES;
}

Formatted as a registration field

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

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

Любая помощь, объяснения, предложения и т. Д. С благодарностью.

Ответы [ 2 ]

1 голос
/ 11 мая 2011

В какой-то момент вам нужно установить делегат для textField

Так как вы добавили метод делегата в RegistrationViewController.m, вы можете установить делегат сразу после добавления ячейки в - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath.

Пока вы возвращаете подкласс UITableViewCell из LogInCustomCell.xib, вы можете использовать что-то вроде этого:

LogInCustomCell *cell = (LogInCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil];
    cell = (LogInCustomCell *)[nib objectAtIndex:0];
}
cell.textField1.delegate = self;
cell.textField2.delegate = self;
cell.textField3.delegate = self;
cell.textField4.delegate = self;

...

return cell;
0 голосов
/ 11 мая 2011

Из того, что я вижу, у вас есть методы делегата в RegistrationViewController.m

Но вы указываете, что CustomRegCell является делегатом, поэтому методы делегата должны быть там

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