0

私のアプリでは、UItableview グループ テーブルを使用しました。2 つのセクションがあり、検証を実行したいと考えています。

例: セクション 1 には 2 つの行があります。ユーザーが行を選択した場合、1 つのユーザーはセクション 2 から値を選択する必要があり、ユーザーが 1 つのセクションで 2 番目の行を選択した場合、セクション 2 で選択する必要はありません。

以下は私のコードです:

- (void)viewDidLoad
{
    NSArray *arr_data1 =[[NSArray alloc]initWithObjects:@"Yes",@"No",nil];
    NSArray *arr_data2 =[[NSArray alloc] initWithObjects:@"Monotherapy",@"Adjunctive",nil];

    NSDictionary *temp =[[NSDictionary alloc]
                         initWithObjectsAndKeys:arr_data1,@"",arr_data2,
                         @"Was it monotherapy or adjunctive",nil];
    self.tableContents =temp;
    self.arr_data =[[self.tableContents allKeys]
                      sortedArrayUsingSelector:@selector(compare:)];

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.arr_data count];
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [self.arr_data objectAtIndex:section];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSArray *listData =[self.tableContents objectForKey:
                        [self.arr_data objectAtIndex:section]];
    return [listData count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

    NSArray *listData =[self.tableContents objectForKey:
                        [self.arr_data objectAtIndex:[indexPath section]]];

    UITableViewCell * cell = [tableView
                              dequeueReusableCellWithIdentifier: SimpleTableIdentifier];

    if(cell == nil) {



cell = [[UITableViewCell alloc]
             initWithStyle:UITableViewCellStyleDefault
             reuseIdentifier:SimpleTableIdentifier];


    }

NSUInteger row = [indexPath row];

cell.textLabel.text = [listData objectAtIndex:row];

return cell;

}



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

    NSArray *listData =[self.tableContents objectForKey:
                        [self.arr_data objectAtIndex:[indexPath section]]];
    NSUInteger row = [indexPath row];
    NSLog(@"fdfdfdf=%d",[indexPath row]);
    NSString *rowValue = [listData objectAtIndex:row];

    if ([rowValue isEqualToString:@"Yes"])
    {
        NSString *message = [[NSString alloc] initWithFormat:@"%@",rowValue];
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle:@"You selected"
                              message:message delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil];
        [alert show];
    }



    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
4

5 に答える 5

2

didselect方法ではUITableView、セクション番号を確認し、そのセクションからどの行がクリックされたかを確認する必要があります

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

       if (indexPath.section == 0)
    {
        if (indexPath.row == 0)
        {
         //do this
        }
        else if (indexPath.row == 1)
        {
         //do this
        }
    }
    else
    {
    //do this
    }
    }
于 2012-12-12T08:58:45.903 に答える
1

最初に変数を宣言してcount、セクション2で選択されたアイテムの数を追跡isItemRequiredし、フラグ変数としてsythesizeそれらを追跡してから、次のデリゲートを使用できます。

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

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

最初のサンプルコード:

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

    if(indexPath.section == 0)
    {
        if(indexPath.row == 0)
        {
            isItemRequired = YES;

            if(isItemRequired && count==0)
            {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Item Required" message:@"You must have to select one or more item in section 2" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil ];

                [alert show];
            }

        }
        else
        {
            isItemRequired = NO;
        }

    }
    else if(indexPath.section == 1)
    {
        count = 0;

        for (int i=0; i < [tableView numberOfRowsInSection:1]; i++)
        {
          UITableViewCell *cell =  [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]];
          if(cell.selected==YES)
          {
              count++;
          }
        }

    }

}

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

    if(indexPath.section == 1)
    {
        count = 0;

        for (int i=0; i < [tableView numberOfRowsInSection:1]; i++)
        {
            UITableViewCell *cell =  [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]];
            if(cell.selected==YES)
            {
                count++;
            }
        }

        if(isItemRequired && count==0)
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Item Required" message:@"Atleast one item should be selected in section 2" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil ];

            [alert show];
        }

    }


}
于 2012-12-12T10:39:50.200 に答える
1
In - (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath ,
you can check the section you need by using the following code:

- (void)tableView:(UITableView *)tableView 
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
  if(indexPath.section == 0)
  {
   //do as per you requirement

  }
  else if(indexPath.section == 1)
  {
   //do as per you requirement

  }

}
于 2012-12-12T08:56:15.840 に答える
0

次の代表者で

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

デリゲートから返されたindexPathを使用してチェックを追加すると、次のようにどのセクションのどの行が選択されているかがわかります。

if(indexPath.section == 0 && indexPath.row == 0)
{
 // Select something from the another section also
}
else if(indexPath.section == 0 && indexPath.row == 1)
{
 // No need to select from another section.
}
于 2012-12-12T09:00:06.943 に答える
0

まず、次のようなファイルで1つのBOOL変数を取得します...isYes.h

BOOL isYes;

メソッドの後、次のようviewDidLoad:に割り当てるだけNOです..

isYes = NO;

その後、didSelectRowAtIndexPathデリゲートメソッドで次のように使用します...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
         if(indexPath.section == 0 && indexPath.row == 0)
         {
             isYes = YES;   
         }
         else if(indexPath.section == 0 && indexPath.row == 1)
         {
             isYes = NO;
         }
         if(isYes){
            if(indexPath.section == 1 )
            {
              //here user can select the section 2  
            }
         }
} 

これがお役に立てば幸いです....

于 2012-12-12T09:13:10.373 に答える