Как я могу скрыть эти 2 строки в выбранной строке?
Как я могу скрыть эти 2 строки в выбранной строке?
[[pickerview.subviews objectAtIndex:1] setHidden:TRUE];
[[pickerview.subviews objectAtIndex:2] setHidden:TRUE];
Используйте это в методе делегата titleForRow
или viewForRow
для pickerView
.
Основываясь на других ответах, я решил перечислить 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
В настройке 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];
Это не очень приятное решение и, безусловно, не совместимое с переходом, но на данный момент оно выполняет свою работу. Надеюсь, это поможет.
Это работало для меня в Swift в бета-версии iOS 9.
datePicker.subviews[0].subviews[1].hidden = true
datePicker.subviews[0].subviews[2].hidden = true
Swift 3 Version (Работа):
pickerView.subviews[1].isHidden = true
pickerView.subviews[2].isHidden = true
Он работает до ios7.
pickerView.showsSelectionIndicator = NO;
для получения дополнительной информации в ios7 см. этот документ
Это легко достигается. Просто поместите свой PickerView внутри ScrollView с нужным размером вашей строки и используйте делегат pickerView: rowHeightForComponent:), чтобы изменить высоту строки сборщика немного больше, чем ваш ScrollView. Таким образом, строки будут скрыты.
Я решил это простым трюком: Представьте представление выбора в представлении и задайте свойство subviews для этого представления = true. Теперь просто установите высоту строки в представлении picker = высота представления контейнера, после чего линия исчезнет.
func numberOfComponents(in pickerView: UIPickerView) -> Int
{
pickerView.subviews.forEach({
$0.isHidden = $0.frame.height < 1.0
})
return 1
}
Просто напишите этот код в вашем методе viewdidload
[[PickerView.subviews objectAtIndex:1] setHidden:TRUE];
[[PickerView.subviews objectAtIndex:2] setHidden:TRUE];
В 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];
Хорошо, это будет намного лучше:] если у кого-то есть лучший ответ, просто запишите его для совместного использования:)
Я выбрал другой подход, чтобы сделать его немного более перспективным доказательством на случай, если Apple решит что-то изменить по строке
for subview in setPickerView.subviews{
if subview.frame.origin.y != 0{
subview.isHidden = true
}
}
так как (subView, который содержит элементы) origin y location равен 0, тогда я могу спрятать что-нибудь еще, не рискуя ошибкой индекса за пределами границ
Enjoy
EDIT: Я забыл сказать вам, что я поместил его в метод viewDidLayoutSubviews!
Вы также можете сделать расширение для UIPickerView:
extension UIPickerView {
func hideSelectionIndicator() {
for i in [1, 2] {
self.subviews[i].isHidden = true
}
}
}
И затем просто вызовите myPickerView.hideSelectionIndicator()
для каждого PickerView, который вы хотите изменить.
Этот код отлично работает для iOS 10 с быстрым 3
Просто добавьте этот код в свой класс контроллера вида.
override func viewDidLayoutSubviews() {
timePickerView.subviews[1].isHidden = true
timePickerView.subviews[2].isHidden = true
}