0

このコードを使用して UISegment を作成します。

//segment controll

            NSString *key2 = [allKeys2 objectAtIndex:i];

            NSString *obj2 = [DictionaryHomework objectForKey:key2];

            int val;
            val = [obj2 intValue];

            //segment controll

            NSArray *itemArray2 = [NSArray arrayWithObjects: @"very easy", @"easy", @"ok", @"hard", @"challenging", nil];
            UISegmentedControl *segmentedControl2 = [[UISegmentedControl alloc] initWithItems:itemArray2];
            segmentedControl2.frame = CGRectMake(480, -60, 130, 350);
            segmentedControl2.segmentedControlStyle = UISegmentedControlStyleBar;
            segmentedControl2.selectedSegmentIndex = val - 1;
            [segmentedControl2 addTarget:self action:@selector(segmentedControlHomework:) forControlEvents:UIControlEventValueChanged];

            segmentedControl2.transform =
            CGAffineTransformRotate(segmentedControl2.transform, degreesToRadians(90));

            NSArray *arr = [segmentedControl2 subviews];
            for (int i = 0; i < [arr count]; i++) {
                UIView *v = (UIView*) [arr objectAtIndex:i];
                NSArray *subarr = [v subviews];
                for (int j = 0; j < [subarr count]; j++) {
                    if ([[subarr objectAtIndex:j] isKindOfClass:[UILabel class]]) {
                        UILabel *l = (UILabel*) [subarr objectAtIndex:j];
                        l.transform = CGAffineTransformMakeRotation(- M_PI / 2.0); //do the reverse of what Ben did
                    }
                }
            }

            [image1 addSubview:segmentedControl2];

            segmentedControl2.tag = i;

            [segmentArray addObject: segmentedControl2];

            //segment control

iOS5 では、コントロールはタイトルを水平方向にロードしますが、iOS6 では垂直方向にロードします。どうしてこれなの?iOS6で変わった?

4

1 に答える 1

4

の内部機構をいじっていUISegmentedControlます。技術的にはプライベート API を使用していませんが、公開されていない部分にアクセスしUIKitています。

iOS 6 で動作が変更された理由の 1 つは、セグメント化されたコントロールがlayoutSubviews別の場所でサブビューを遅延して構築するようになったことです。サブビューをまったく使用しない場合もあります。しかし、私はここで推測しているだけです。ただし、文書化されていないフレームワークの内部を変更するのは Apple の選択です。

あなたのコードは、配送アプリで決して使用されるべきではありません。ビルトインのセグメント化されたコントロールではできないこのようなこと (垂直セグメント?) を行いたい場合は、独自に構築してください。

于 2012-09-24T14:07:46.823 に答える