0

私はxcodeが初めてで、最初のiPhoneアプリを作成しています。

UITableviewタブ付き画面に8行あります。ユーザーが一度に最大4行を選択し、選択時にチェックマークを付けるコードがあります。

NSStringここで、ビューを変更して次のタブに移動すると、これらのチェックされた行のテキストをカンマで区切られた単一の変数に保存したいと考えています。

そうすることは可能ですか?ありがとう、どんな助けでも大歓迎です。

選択した行を保存する最初のタブのコードを次に示します。

@implementation Psychological

static int count = 0;
- (void)viewDidLoad {
[super viewDidLoad];

listOfItems = [[NSMutableArray alloc] init];

[listOfItems addObject:@"1 option"];
[listOfItems addObject:@"2 option"];
[listOfItems addObject:@"3 option"];
[listOfItems addObject:@"4 option"];
[listOfItems addObject:@"5 option"];
[listOfItems addObject:@"6 option"];
[listOfItems addObject:@"7 option"];
[listOfItems addObject:@"8 option"];    

}
#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     {
// Return the number of rows in the section.
return [listOfItems count];
}


// Customize the appearance of table view cells.
- (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];
}


// Configure the cell...
NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
cell.text = cellValue;



return cell;
}


#pragma mark -
#pragma mark Table view delegate

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

UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {
    if(count < 4)
    {
    [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
    [selectedIndexes addObject:[NSNumber numberWithInt:indexPath.row]];
        count++;
    }

} else {
    [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
    [selectedIndexes removeObject:[NSNumber numberWithInt:indexPath.row]];
    count --;
}
[tableView deselectRowAtIndexPath:indexPath animated:NO];

}


- (void)dealloc {

[listOfItems release];
[super dealloc];
}


@end
4

6 に答える 6

4

最も簡単な方法は、必要な文字列を返すメソッドを作成することです。メソッドは次のようになります。

- (NSString *) selectedItems {
    NSMutableString *result = [NSMutableString string];
    for (int i = 0; i < [itemsArray count]; i++) {
        NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0];
        [tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
        if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
            [result appendFormat:@"%@",cell.textLabel.text];
        }
    }
    if (result.length > 2) {
        [result replaceCharactersInRange:NSMakeRange(result.length-1, 1) withString:@""];
    }
return result;
}

別のView Controllerでこの行を取得するには、navigationController.viewControllerでPsychological View Controllerを見つけて、このメソッドを呼び出す必要があります。

- (void) method {
    for (UIViewController *vc in self.navigationController.viewControllers) {
        if ([vc isKindOfClass:[Psychological class]]) {
            NSString *str = vc.selectedItems;
        }
    }
}
于 2012-07-17T11:56:23.470 に答える
1
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if (selectedCell.accessoryType == UITableViewCellAccessoryNone) {
if(count<4){
        selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
        [[listOfItems objectAtIndex:indexPath.row]setObject:@"YES" forKey:@"Selected"];
count++;
}

    } else if (selectedCell.accessoryType == UITableViewCellAccessoryCheckmark) {
        if(count>=0){
        selectedCell.accessoryType = UITableViewCellAccessoryNone;
        [[listOfItems objectAtIndex:indexPath.row]setObject:@"NO" forKey:@"Selected"];
count--;
    }  
} 

上記のコードを置き換え、その時点でページをナビゲートする場合は、選択した値がyesかnoかを確認し、yesの場合はその値を渡し、それ以外の場合はそのままにします。

for (int i =0 ; i<[listOfItems count]; i++) {
        if ([[[listOfItems objectAtIndex:i]valueForKey:@"Selected"]isEqualToString:@"YES"]) {
            if ([selectedId length]==0) {
                selectedId = [NSString stringWithFormat:@"%@",[[listOfItems objectAtIndex:i]valueForKey:@"user_id"]];
            }else {
                selectedId = [selectedId stringByAppendingFormat:@",%@",[[listOfItems objectAtIndex:i]valueForKey:@"user_id"]];
            }
        }
    }
于 2012-08-08T06:30:32.163 に答える
1

次のコードが要件に合っていることを願っています。

//didSelect メソッド

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

    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

    if ([selectedCell accessoryType] == UITableViewCellAccessoryNone) {

     if(count < 4) {

         [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
         [selectedIndexes addObject:[NSNumber numberWithInt:indexPath.row]];
         count++;
     }

  } else {

    [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
    [selectedIndexes removeObject:[NSNumber numberWithInt:indexPath.row]];
    count --;
}

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

selectedCell をグローバルに宣言して、すべてのタブでアクセスします

NSMutableString *selectedCell = [[NSMutableString alloc]init]; //Should declare this string globally

//次のコードを -viewWillDisappear メソッドまたは適切と思われる場所で使用します (現在のクラスから移動するときに呼び出されるメソッド)

for(int i = 0; i < [selectedIndexes count]; i++){

 [selectedCell appendString:[selectedIndexes objectAtIndex:i];
 [selectedCell appendString:@","];

}

NSRange range = {[selectedCell length]-1,1};
[selectedCell deleteCharactersInRange:range];
于 2012-07-17T11:56:18.177 に答える
1
NSMutableString *selectedRow=[NSMutableString alloc]init];

for(int i=0; i<[count];i++)
{
    selectedRow=[arrayName objectAtIndex:row];
    [selectedRow appendString:@","];
}
于 2012-07-17T14:37:37.820 に答える
0

グローバル配列が必要になる場合があります。選択した値をそのグローバル配列に格納すると、他の場所に簡単に表示できます。..:-)

于 2012-07-17T11:50:06.510 に答える
0

新しいクラスを作成し、それを呼び出してOption、2つのプロパティを指定します。1つはNSStringと呼ばれname、もう1つはBOOLと呼ばれselectedます。listOfItems文字列の配列として持つ代わりに、それをOptionオブジェクトのリストにします。それぞれOptionが現在選択されているかどうかを追跡します。

を所有するコントローラークラスをlistOfItems作成し、文字列を作成して次に選択したコントローラーに渡すようにUITabBarControllerDelegate実装します。tabBarController:didSelectViewController:

于 2012-07-17T11:51:09.943 に答える