Подтвердить что ты не робот

IOS7 UIPickerView, как скрыть индикатор выбора

Как я могу скрыть эти 2 строки в выбранной строке?

enter image description here

4b9b3361

Ответ 1

[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];

Используйте это в методе делегата titleForRow или viewForRow для pickerView.

Ответ 2

Основываясь на других ответах, я решил перечислить subviews и увидел, что линии имеют высоту 0.5, поэтому мое решение теперь выглядит так: Swift:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {

     pickerView.subviews.forEach({

          $0.hidden = $0.frame.height < 1.0
     })

     return myRowCount
}

И в Objective-C

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

     [pickerView.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) {

        subview.hidden = (CGRectGetHeight(subview.frame) < 1.0) 
     }];

    return myRowCount
}

Очевидно, что это не особенно будущее доказательство, но, вероятно, больше, чем скрытие подсмотра в заданном индексе.

Изменить: Обновлено для обработки дела, предоставленного @Loris

Ответ 3

В настройке iOS7 параметр pickerview.showsSelectionIndicator не действует, согласно документации (https://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UIPickerView.html).

Однако, поскольку UIPickerView, в конце концов, является UIView с subviews, я проверил, какие там были просмотры. Я нашел 3, первый из них содержит все компоненты UIPickerView, а два других - две строки.

Итак, установив второй и третий (индекс 1 и 2) скрытыми, две строки были удалены.

[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];

Это не очень приятное решение и, безусловно, не совместимое с переходом, но на данный момент оно выполняет свою работу. Надеюсь, это поможет.

Ответ 4

Это работало для меня в Swift в бета-версии iOS 9.

datePicker.subviews[0].subviews[1].hidden = true
datePicker.subviews[0].subviews[2].hidden = true

Ответ 5

Swift 3 Version (Работа):

pickerView.subviews[1].isHidden = true
pickerView.subviews[2].isHidden = true

Ответ 7

Это легко достигается. Просто поместите свой PickerView внутри ScrollView с нужным размером вашей строки и используйте делегат pickerView: rowHeightForComponent:), чтобы изменить высоту строки сборщика немного больше, чем ваш ScrollView. Таким образом, строки будут скрыты.

Ответ 8

Я решил это простым трюком: Представьте представление выбора в представлении и задайте свойство subviews для этого представления = true. Теперь просто установите высоту строки в представлении picker = высота представления контейнера, после чего линия исчезнет.

Ответ 9

func numberOfComponents(in pickerView: UIPickerView) -> Int
    {
        pickerView.subviews.forEach({
            $0.isHidden = $0.frame.height < 1.0
        })
        return 1
    }

Ответ 10

Просто напишите этот код в вашем методе viewdidload

[[PickerView.subviews objectAtIndex:1] setHidden:TRUE];
[[PickerView.subviews objectAtIndex:2] setHidden:TRUE];

Ответ 11

В ios7 мы не можем скрывать отдельную строку в UIPickerView и мы можем знать, что с этой страницы: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPickerView_Class/index.html#//apple_ref/occ/instm/UIPickerView/showsSelectionIndicator

Но мы можем добавить два UIViews для покрытия, а ширина двух UIView - 1. Вот пример кода:

s_leftLine = [[UIView alloc] initWithFrame:CGRectMake(s_pickerView.frame.size.height/2,
                                                      s_pickerView.frame.size.width/2 - kWidthOfPickerPage/2 + 1,
                                                      1,
                                                      s_pickerView.frame.size.height)];
s_leftLine.backgroundColor = [UIColor whiteColor];
s_leftLine.layer.zPosition = s_pickerView.layer.zPosition + 1; // make sure the line is on the top
[s_pickerView addSubview:s_leftLine];

Хорошо, это будет намного лучше:] если у кого-то есть лучший ответ, просто запишите его для совместного использования:)

Ответ 12

Я выбрал другой подход, чтобы сделать его немного более перспективным доказательством на случай, если Apple решит что-то изменить по строке

for subview in setPickerView.subviews{
    if subview.frame.origin.y != 0{
        subview.isHidden = true
    }
}

так как (subView, который содержит элементы) origin y location равен 0, тогда я могу спрятать что-нибудь еще, не рискуя ошибкой индекса за пределами границ

Enjoy

EDIT: Я забыл сказать вам, что я поместил его в метод viewDidLayoutSubviews!

Ответ 13

Вы также можете сделать расширение для UIPickerView:

extension UIPickerView {
    func hideSelectionIndicator() {
        for i in [1, 2] {
            self.subviews[i].isHidden = true
        }
    }
}

И затем просто вызовите myPickerView.hideSelectionIndicator() для каждого PickerView, который вы хотите изменить.

Ответ 14

Этот код отлично работает для iOS 10 с быстрым 3

Просто добавьте этот код в свой класс контроллера вида.

override func viewDidLayoutSubviews() {
        timePickerView.subviews[1].isHidden = true
        timePickerView.subviews[2].isHidden = true
        }