Скрыть UIPickerView в UITableViewController, не касаясь снаружи - PullRequest
2 голосов
/ 10 июня 2011

Прямо сейчас у меня есть 2 разных UIPickerView в стороне моего UITableViewController. Я показываю их только при нажатии на определенные ячейки в таблице. То, что я пытаюсь сделать, это скрывать сборщиков всякий раз, когда я прикасаюсь к ним. Есть ли метод делегата или что-то подобное для достижения этой цели? Я предпочитаю оставить свой контроллер в качестве UITableViewController вместо простого UIViewController, поскольку у меня есть textView в одной из ячеек, а прокрутка после отображения клавиатуры - это слишком много в UIViewController.

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

1 Ответ

1 голос
/ 10 июня 2011

Одно из возможных решений заключается в том, что при нажатии на конкретную ячейку и обработке средства выбора (для представления средства выбора) можно вставить представление, называемое MASK View, над представлением таблицы.(с фреймом как self.tableview.frame - yourPicker.frame.size.height).Теперь, когда вы получаете любой щелчок по этому представлению, вы можете обрабатывать его следующим образом:

-(void)showMaskView{
    if (!viewMaskView) {
        CGRect viewRect = CGRectMake(0, 0, self.tableView.frame.size.width, self.tableView.frame.size.height - yourPicker.frame.size.height);
        viewMaskView = [[MaskView alloc] initWithFrame:viewRect];
        viewMaskView.delegate = self;
    }   
    [self.view addSubview:viewMaskView];
    [self.view bringSubviewToFront:viewMaskView];
}

-(void)removeMaskView{
    if (viewMaskView) {
        [viewMaskView removeFromSuperview];
    }
    //Remove the Picker
}

В классе MaskView вы можете обрабатывать прикосновения следующим образом

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    if(self.delegate && [self.delegate respondsToSelector:@selector(removeMaskView)])
        [self.delegate removeMaskView];
}

.маска вид на пикер в изображении.При нажатии он удаляет сборщик.enter image description here

...