2013-05-31 2 views
0

스위프에 의한 세그먼트 제어의 변경 값은 어떻게됩니까?Swipegesture로 세그먼트 화 된 제어의 변경 값은 어떻게됩니까?

"만족하지 잘못된 매개 변수 : selectedSegmentIndex < (NSInteger) self._items.count"

- (void)updateSelectedSegmentText 
    { 
     int theSegmentIndex = [_segmentedControl selectedSegmentIndex]; 
     NSDictionary *theInfo = [self.top.segments objectAtIndex:theSegmentIndex]; 
     self.bioTextView.text = [NSString stringWithFormat:@"%@", theInfo [@"sData"]]; 
     [self.bioTextView scrollRangeToVisible:NSMakeRange(0, 0)]; 
    } 

    - (void)swipe:(UISwipeGestureRecognizer *)swipeRecogniser 
    { 
     s = 1; 
     if ([swipeRecogniser direction] == UISwipeGestureRecognizerDirectionLeft) 
     { 
      self.segmentedControl.selectedSegmentIndex -=s; 
      [self updateSelectedSegmentText]; 
     } 
     else if ([swipeRecogniser direction] == UISwipeGestureRecognizerDirectionRight) 
     { 
      self.segmentedControl.selectedSegmentIndex +=s; 
      [self updateSelectedSegmentText]; 
     } 
    } 

답변

2

당신은 새로운 인덱스가 유효한 경우 먼저 확인해야합니다. 첫 번째 탭에 이미있는 경우 왼쪽으로 이동할 수 없으며 마지막 탭에 있으면 오른쪽으로 이동할 수 없습니다. 따라서 selectedSegmentIndex 속성을 설정하기 전에 먼저 새 인덱스를 계산 한 다음 범위가 맞는지 확인해야합니다.

NSInteger index = self.segmentedControl.selectedSegmentIndex; 
if ([swipeRecogniser direction] == UISwipeGestureRecognizerDirectionLeft) { 
    --index; 
} else if ([swipeRecogniser direction] == UISwipeGestureRecognizerDirectionRight) { 
    ++index; 
} 

if (0 <= index && index < self.segmentedControl.numberOfSegments) { 
    self.segmentedControl.selectedSegmentIndex = index; 
    [self updateSelectedSegmentText]; 
} 
+0

감사합니다. Sven! – Astakhoff

관련 문제