[英]inline UiPickerView in UITableView
我使用了兩個以上的內聯選擇器視圖(不是UIDatePickerView),並且在所有過渡中都可以正常工作,但是我的問題是它混合了數據源值並顯示了兩個混合值。
我剛剛使用Apple的示例進行了內聯日期選擇器檢查。
我有data1PickerView
及其自己的兩個DataSource
命名為data1
和data2
。
當我在tableViewCell didSelect上打開pickerView時,我的代碼如下
data1=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",nil];
data2=[NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",nil];
#pragma mark - UITableViewDelegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(indexPath.row==1){
isData1=TRUE;
isData2=FALSE;
}
else if(indexPath.row==2){
isData2=TRUE;
isData1=FALSE;
}
if (cell.reuseIdentifier == kDateCellID)
{
if (EMBEDDED_DATE_PICKER)
[self displayInlineDatePickerForRowAtIndexPath:indexPath];
else
[self displayExternalDatePickerForRowAtIndexPath:indexPath];
}
else
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
/*! Reveals the date picker inline for the given indexPath, called by "didSelectRowAtIndexPath".
@param indexPath The indexPath to reveal the UIDatePicker.
*/
- (void)displayInlineDatePickerForRowAtIndexPath:(NSIndexPath *)indexPath
{
// display the date picker inline with the table content
[self.tableView beginUpdates];
BOOL before = NO; // indicates if the date picker is below "indexPath", help us determine which row to reveal
if ([self hasInlineDatePicker])
{
before = self.datePickerIndexPath.row < indexPath.row;
}
BOOL sameCellClicked = (self.datePickerIndexPath.row - 1 == indexPath.row);
// remove any date picker cell if it exists
if ([self hasInlineDatePicker])
{
[self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.datePickerIndexPath.row inSection:0]]
withRowAnimation:UITableViewRowAnimationFade];
self.datePickerIndexPath = nil;
}
if (!sameCellClicked)
{
// hide the old date picker and display the new one
NSInteger rowToReveal = (before ? indexPath.row - 1 : indexPath.row);
NSIndexPath *indexPathToReveal = [NSIndexPath indexPathForRow:rowToReveal inSection:0];
[self toggleDatePickerForSelectedIndexPath:indexPathToReveal];
self.datePickerIndexPath = [NSIndexPath indexPathForRow:indexPathToReveal.row + 1 inSection:0];
}
// always deselect the row containing the start or end date
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
[self.tableView endUpdates];
// inform our date picker of the current date to match the current cell
[self updateDatePicker];
}
// The number of columns of data
- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
// The number of rows of data
- (int)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if(isData1)
return data1.count;
else if(isData2)
return data2.count;
else
return 0;
}
// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if(isData1)
return [data1 objectAtIndex:row];
else if(isData2)
return [data2 objectAtIndex:row]
;
else
return @"";
}
- (void)toggleDatePickerForSelectedIndexPath:(NSIndexPath *)indexPath
{
[tblRegister beginUpdates];
NSArray *indexPaths = @[[NSIndexPath indexPathForRow:indexPath.row + 1 inSection:0]];
// check if 'indexPath' has an attached date picker below it
if ([self hasPickerForIndexPath:indexPath])
{
// found a picker below it, so remove it
[tblRegister deleteRowsAtIndexPaths:indexPaths
withRowAnimation:UITableViewRowAnimationFade];
}
else
{
// didn't find a picker below it, so we should insert it
[tblRegister insertRowsAtIndexPaths:indexPaths
withRowAnimation:UITableViewRowAnimationFade];
}
[tblRegister endUpdates];
}
誰能告訴我是什么原因導致我的data1數據源與data2數據源交換值,反之亦然,如下圖所示
我懷疑的是,當UI呈現這些選擇器視圖時, isData1
和isData2
布爾值不是您期望的值。 我希望如果在- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
方法上放置一個斷點,您會發現有些問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.