Uipickerview 구성 요소를 어떻게 랩으로 만들 수 있습니까?
-
03-07-2019 - |
문제
Uipickerview 구성 요소에 연속 숫자 세트를 보여주고 싶지만 시계-> 타이머 애플리케이션의 초 구성 요소처럼 랩을해야합니다. 내가 활성화 할 수있는 유일한 동작은 타이머 응용 프로그램의 시간 구성 요소처럼 보이며, 여기서 한 방향으로만 스크롤 할 수 있습니다.
해결책
행의 수를 다수로 설정하는 것은 쉽고 높은 가치로 시작하게 만들면 사용자가 휠을 아주 오랫동안 스크롤 할 가능성은 거의 없습니다. 일어난 일은 그들이 바닥에 부딪 칠 것입니다.
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
// Near-infinite number of rows.
return NSIntegerMax;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
// Row n is same as row (n modulo numberItems).
return [NSString stringWithFormat:@"%d", row % numberItems];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.pickerView = [[[UIPickerView alloc] initWithFrame:CGRectZero] autorelease];
// ...set pickerView properties... Look at Apple's UICatalog sample code for a good example.
// Set current row to a large value (adjusted to current value if needed).
[pickerView selectRow:currentValue+100000 inComponent:0 animated:NO];
[self.view addSubview:pickerView];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSInteger actualRow = row % numberItems;
// ...
}
다른 팁
여기에서 내 대답을 찾았습니다.
http://forums.macrumors.com/showthread.php?p=6120638&highlight=uipickerview#post6120638
행의 제목을 요청하면 다음을 제공합니다. 코드 :
return [rows objectAtIndex:(row % [rows count])];
사용자가 didselectrow : incomponent :, 다음과 같은 것을 사용합니다.
암호:
//we want the selection to always be in the SECOND set (so that it looks like it has stuff before and after)
if (row < [rows count] || row >= (2 * [rows count]) ) {
row = row % [rows count];
row += [rows count];
[pickerView selectRow:row inComponent:component animated:NO];
}
UIPICKERVIEW는 기본적으로 포장을 지원하지는 않지만 더 많은 데이터 세트를 표시하고 선택기가 멈출 때 컴포넌트를 데이터 세트의 중간에 중앙으로 중앙에 놓아서 속일 수 있습니다.
배열을 여러 번 만들어 숫자를 여러 번 만들 수 있습니다. 0에서 23까지의 숫자를 갖고 싶을 때 배열에 넣으십시오. 우리는 이렇게 10 번을 할 것입니다 ...
NSString *stdStepper;
for (int j = 0; j<10; j++) {
for(int i=0; i<24; i++)
{
stdStepper = [NSString stringWithFormat:@"%d", i];
[_hoursArray addObject:stdStepper];
}
}
나중에 우리는 이렇게 선택한 행 0을 설정했습니다
[_hoursPickerView selectRow:120 inComponent:0 animated:NO];
모든 대답은 실제로 픽커 뷰를 주기적으로 만드는 것이 아닙니다.
나는 주기적 테이블 뷰를 기준으로 만들었습니다 UIScrollView
. 그리고이 테이블 뷰를 바탕으로 다시 구현합니다 UIPickerView
. 당신은 이것에 관심이있을 것입니다 DLPickerView
. 그리고이 선택기보기에는 모든 기능이 있습니다 UIPickerView
또한 많은 새로운 기능을 제공하지만 사용자 정의이 선택기보기가 훨씬 쉽습니다.
https://github.com/danleechina/dlpickerview
그리고 이것을 알고 있어야합니다 DLPickerView
주기적으로 스크롤은 실제로 주기적으로 스크롤됩니다. 모든 마법은 다른 수업 때문에 일어났습니다 DLTableView
.