2009-07-27 3 views
2

이전에 선택한 UISegmentControl 세그먼트를 추적해야합니다. 사용할 수있는 대리자 메서드가 있습니까? 어쩌면 selectedSegmentShouldChange:과 같은 것일까요? 내가 찾을 수있는 유일한 대리자 메서드는 segmentedControl:selectedSegmentChanged:입니다. 이 대리인은 내가 필요로하는 것보다 한 발 앞선 것입니다.UISegmentedControl의 이전에 선택된 세그먼트를 저장 하시겠습니까?

답변

2

이 상황을 처리하기위한 API는 없습니다. 대신 마지막으로 선택한 세그먼트를 추적하기 위해 간단한 FIFO 버퍼로 작업해야했습니다. 여기 내 PreviousItem 개체에 대한 코드는 다음과 같습니다

// PreviousItem.h 

#import <Foundation/Foundation.h> 

typedef struct { 
    char current; 
    int a; 
    int b; 
} itemFIFO; 

@interface PreviousItem NSObject { 
    itemFIFO stack; 
} 

- (void) push(int) a; 
- (int) pop; 

@end 

// PreviousItem.m 

#import "PreviousItem.h" 


@implementation PreviousItem 

- (id) init 
{ 
    if (![super init]) { 
    return nil; 
    } 

    stack.a = -1; 
    stack.b = -1; 

    return self; 
} 

- (void) push(int) a 
{  
    stack.b = stack.a; 
    stack.a = a; 
} 

- (int) pop 
{ 
    return stack.b; 
} 

@end 

그것의 예는 사용의 :

prevSegment = [[PreviousItem alloc] init]; 
[prevSegment push:0]; // Previously selected segment is 0 
[mySegmentControl setSelectedSegment:1]; // Choose a new segment 
[prevSegment push:1]; // Update our segment stack 
// User does something and we need to know the previously selected segment 
int oldSegment = [prevSegment pop]; // Will return 0 in this contrived example