2011-11-07 8 views
0

私は、水平スクロールするuiscrollview内にuisegmentedcontrolを持っています。スクロールビューは正常に機能しており、コンテンツはセグメント化されたコントロールの幅に応じてサイズが変更されます。セグメント化されたコントロールは、最初に表示されたときに表示されるセグメントのタッチを検出します。右にスクロールすると、新しく表示されたセグメントを選択できません。カットトーフは、それがクリップされたビューがあった場合のように、最初に表示されたものと全く同じセグメントではありません。助けてくれてありがとう、私はscrollviewからクリップのサブビューの選択を解除しました。uisegmentedcontrolが特定のセグメントのタッチを検出しない

// creates segmented control to indicate test to show on graph 

    UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:self.labels]; 
    segmentedControl.frame = CGRectMake(15, 41, 285, 30); 
    segmentedControl.autoresizingMask = 
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 
    segmentedControl.selectedSegmentIndex = 0; 
    segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    [segmentedControl addTarget:self action:@selector(testChange:) forControlEvents:UIControlEventValueChanged]; 

    //checks the length of the text in each segment and asjusts control accordingly 
    int x = 0; 
    segmentWidth = 0.0; 
    for (id segment in [segmentedControl subviews]) 
    { 
     for (id label in [segment subviews]) 
     { 
      if ([label isKindOfClass:[UILabel class]]) 
      { 

       [label setTextAlignment:UITextAlignmentCenter]; 
       [label setFont:[UIFont boldSystemFontOfSize:12]]; 

       CGFloat textWidth = [[segmentedControl titleForSegmentAtIndex:x] sizeWithFont:[UIFont boldSystemFontOfSize:12.0]].width + 20; 
       [segmentedControl setWidth:textWidth forSegmentAtIndex:x]; 
       segmentWidth += textWidth; 
      } 
     } 
     x++; 
    } 

    self.testSegment = segmentedControl; 
    [segmentedControl release]; 

    //adds segmentedcontroll to scrollview, and adjusts contensize 
    [scrollView setContentSize:CGSizeMake(segmentWidth + 45, scrollView.frame.size.height)]; 
    [scrollView showsHorizontalScrollIndicator]; 
    [scrollView addSubview:testSegment]; 

答えて

1

固定されていますが、問題はセグメント化されたコントロールのフレームを設定してから、各セグメントの幅を計算することでした。

self.testSegment = segmentedControl; 

segmentedControl.frame = CGRectMake(15, 41, segmentWidth+20, 30); 

関連する問題