iphone SDK:选择两个对象的最佳方式(用于比较)

时间:2011-10-31 17:26:50

标签: iphone object comparison

我有多个对象,每个对象都有一系列属性。我希望用户选择两个对象,然后应用程序将显示相应对象属性的比较。我很难决定如何最好地选择这两个对象。我会使用UITableView,但如何在继续之前选择两个单元格?或者,我可以显示UIButton,但再次,如何在继续之前选择两个?也许还有另一种方式不会发生在我身上。

赞赏的想法。

2 个答案:

答案 0 :(得分:2)

您可以使用UITableView并使用复选标记accessoryView,然后在选择两个对象后使用“继续”按钮。

但是,如果你想确保两个对象(不再是)被选中,那么你可以使用两个UIPicker,一个在另一个之上,所以使用可以选择那两个。

答案 1 :(得分:2)

确保您的tableView允许选择:

myTableView.allowsSelection = YES;

定义两个属性,两个存储第一个和第二个选择索引路径:

@property (nonatomic, retain) NSIndexPath *firstSelection;
@property (nonatomic, retain) NSIndexPath *secondSelection;

每当用户选择一行时设置选择。在这个例子中,我使用FIFO方法进行选择。此外,如果已经进行了两个选择,则显示对象属性:

- (void)tableView:(UITableView *)tableView 
                   didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

   // push the selections up each time. The selected items will always be the
   // last two selections
   self.firstSelection = self.secondSelection;
   self.secondSelection = indexPath;

   // if both selections are not nil, two selections have been made.
   if (self.firstSelection && self.secondSelection)
      [self showComparisonOfObject:self.firstSelection
                        withObject:self.secondSelection];
}

最后,在所选行上使用复选标记附件:

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = 
                    [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   if (cell == nil) {
       cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault
                 reuseIdentifier:CellIdentifier] autorelease];
   }

   cell.textLabel.text = someTextYouDefine;
   cell.textLabel.textAlignment = UITextAlignmentCenter;
   cell.selectionStyle = UITableViewCellSelectionStyleNone;

   // this is where the magic happens
   BOOL cellSelected = indexPath == self.firstSelection || 
                       indexPath == self.secondSelection; 

   cell.accessoryType = cellSelected ? UITableViewCellAccessoryCheckmark :
                                       UITableViewCellAccessoryNone;

   // the following two lines ensure that the checkmark does not cause
   // the label to be off-center
   cell.indentationLevel = cellSelected ? 1 : 0;
   cell.indentationWidth = 20.0f;

   return cell;
}