web-dev-qa-db-ja.com

IOS7 UIPickerView選択インジケータを非表示にする方法

選択した行のこれらの2行を非表示にするにはどうすればよいですか?

enter image description here

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

titleForRowviewForRowまたはpickerViewデリゲートメソッドでこれを使用します。

34
motox

他の回答に基づいて、サブビューを列挙することにし、行の高さが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が提供するケースを処理するために更新

23
ChrisH

これは、iOS 9 BetaのSwiftで機能しました。

datePicker.subviews[0].subviews[1].hidden = true
datePicker.subviews[0].subviews[2].hidden = true
8
Justin Domnitz

Swift 3バージョン(Working):

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

Ios7より前に機能しています。

pickerView.showsSelectionIndicator = NO;

ios7の詳細については、このドキュメントを参照してください

https://developer.Apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UIPickerView.html

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

Swift 4.2

2行のコードを、pickerViewのtitleForRowまたはviewForRowデリゲートメソッドに貼り付けます。

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

そして、あなたは行ってもいいはずです。

4
Douglas Putnam

これは簡単に実現できます。 PickerViewを行の目的のサイズでScrollView内に配置し、picker delegate(pickerView:rowHeightForComponent :)メソッドを使用して、ピッカーの行の高さをScrollViewより少し大きく変更します。そのように、線は非表示になります。

4
HeavenlyManBR

これを簡単なトリックで解決しました。ビューにピッカービューを配置し、このビューのクリップサブビュープロパティをtrueに設定します。ここで、ピッカービューで行の高さ=コンテナービューの高さを設定すると、線が消えます。

3
Son Nguyen

Apple何かを変更することを決定した場合に備えて、もう少し将来の証明にするために、別のアプローチを選択しました

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

(アイテムを含むsubView)のOrigin yの位置は0であるため、インデックスの範囲外エラーを危険にさらすことなく、他のものを安全に隠すことができます。

楽しい

編集:私はそれをviewDidLayoutSubviewsメソッドに入れたことを伝えるのを忘れていました!

1
DatForis

このコードをviewdidloadメソッドに書くだけです

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

Ios7では、UIPickerViewの個別の行を非表示にすることはできず、このページからそれを知ることができます。 https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIPickerView_Class/index.html #// Apple_ref/occ/instm/UIPickerView/showsSelectionIndicator

ただし、2つのUIViewを追加してそれをカバーすることができ、2つの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];

[OK]を、これははるかに良いでしょう:]誰かがより良い答えを共有するためにそれを書き留めてください:)

0
NSKevin