UIDatePicker и UITableView - PullRequest
       1

UIDatePicker и UITableView

3 голосов
/ 17 февраля 2011

У меня есть UITableViewController, который является подробным представлением для другого UITableViewController.

В этой таблице есть ячейка с надписью "Дата".Используя пример Apple «DateCell» (http://developer.apple.com/library/ios/#samplecode/DateCell/Introduction/Intro.html), Я пытался добавить UIDatePicker при прикосновении к ячейке.

Я подключил все точно так же, как пример. Единственное, что яЯ изменил то, что я ограждаю код didSelectRowAtIndexPath в этом:

if(indexPath.section == 1 && indexPath.row == 0)
{
   //Date picker stuff
}

Это сделано для того, чтобы он работал только при нажатии правой ячейки.

Для жизни меня,Я не могу заставить его работать. Нажатие на него ничего не делает, но делает его синим (выделено). Повторное нажатие ничего не делает.

Если я прокручиваю до нижней части UITableView, нажатие на него оживляет белый прямоугольникПовторное нажатие в конечном итоге охватывает все табличное представление.

Это не имеет большого смысла для меня. Пожалуйста ... как я могу это сделать?

Если вы хотите больше кода, ямогу предоставить его, но он практически идентичен коду DateCell. Я скопировал / вставил большую часть.

Заранее спасибо,

Клиф

1 Ответ

6 голосов
/ 17 февраля 2011

Убедитесь, что у вас есть объект выбора в IB, если это то, что вы используете, затем создайте ссылку на IBOutlet и подключите его к объекту IB. Я устанавливаю свой pickerView скрытым в IB и делаю его видимым, когда это необходимо. В противном случае вы можете просто создать экземпляр по мере необходимости.

В вашем didSelectRowAtIndexPath вы можете попробовать приведенный ниже код и посмотреть, что произойдет.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (**your cell/section selection logic here**) {
        [self.view endEditing:YES]; // resign firstResponder if you have any text fields so the keyboard doesn't get in the way
        [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; // Scroll your row to the top so the user can actually see the row when interacting with the pickerView

        // Pickerview setup
        [self.typePicker setCenter:CGPointMake(150, 500)]; // place the pickerView outside the screen boundaries
        [self.typePicker setHidden:NO]; // set it to visible and then animate it to slide up
        [UIView beginAnimations:@"slideIn" context:nil];
        [self.typePicker setCenter:CGPointMake(150, 250)];
        [UIView commitAnimations];        
    }
}

После этого вам нужно реализовать метод pickerView:didSelectRow:, если вы хотите обновить метку своей ячейки при изменении выбора вида средства выбора ...

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{
    // Your code to get the current table view cell and update it with the data from your pickerView
}

Убедитесь, что ваш viewController объявлен как делегат для tableView <UITableViewDelegate>, а также для pickerView `'

Это должно дать вам хороший старт. Дайте мне знать, если у вас есть какие-либо вопросы и т. Д.

Ура, Рог

...