0

私のアプリでは、セルをタップすると、新しいビューが表示されます。tableviewCellのtextLabelを編集して、保存することができます。ただし、ビューを切り替えてtableViewに戻ると、セルの順序が異なります。これの理由は何でしょうか?

これが私のコードです:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString * identifier = @"identifier";

self.cell = [tableView dequeueReusableCellWithIdentifier:identifier];

h = [self.tableArray objectAtIndex:indexPath.row];

NSString *brandModel = [[h.brand stringByAppendingString:@" "] stringByAppendingString:h.model];

self.cell.mainLabel.text = brandModel;

self.cell.nicknameLabel.text = handguns.nickname;   

return self.cell;
}
4

3 に答える 3

2

UITableViewセルを保存した後にtableViewをリロードすると、セルデータを設定している配列がそのままであるため、初期状態で並べ替えられます。配列内の配列データ位置ではなく、テーブルビューセルのみを変更できます。

以下に、セルを移動するための UITableView コードを記述しました。ビューをプッシュした後、正常に動作しています。viewWillAppearからリロード メソッドを削除した場合:

#import "MoveCellViewController.h"

@interface MoveCellViewController ()

@end

@implementation MoveCellViewController

- (void)viewDidLoad
{
 UIBarButtonItem *left=[[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(edit)];
 self.navigationItem.leftBarButtonItem=left;

 myArray=[[NSMutableArray alloc]init];  //mutable array;
 myArray=[NSMutableArray arrayWithObjects:@"Aman",@"Ankit",@"Sumit",@"Hercules",@"Jackie Chan", nil];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)edit
{
 if (self.navigationItem.leftBarButtonItem.title==@"Edit") {
    self.navigationItem.leftBarButtonItem.title=@"Done";
    [_tableView setEditing:YES];
 }else
 {
  [_tableView setEditing:NO];
  self.navigationItem.leftBarButtonItem.title=@"Edit";
 }
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 return [myArray count];
}
// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

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

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

 cell.userInteractionEnabled=YES;
 cell.textLabel.text=[myArray objectAtIndex:indexPath.row];
 return cell;
}

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
 return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
 return UITableViewCellEditingStyleNone;
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{
 id ob = [myArray objectAtIndex:destinationIndexPath.row];

 [myArray replaceObjectAtIndex:destinationIndexPath.row withObject:[myArray objectAtIndex:sourceIndexPath.row]];
 [myArray replaceObjectAtIndex:sourceIndexPath.row withObject:ob];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 NextViewController *nx=[[NextViewController alloc] init];
 [self.navigationController pushViewController:nx animated:YES];
}
@end

これは動作するコードであり、View Controller をプッシュした後も変更されません。

于 2013-01-02T05:45:45.400 に答える
0
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
     static NSString *CellIdentifier = @"Cell";

     cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


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

     Write rest of the code here
}
于 2013-01-01T20:28:04.193 に答える
0
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

 NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone; 
   }
h = [self.tableArray objectAtIndex:indexPath.row];

NSString *brandModel = [[h.brand stringByAppendingString:@" "] stringByAppendingString:h.model];

self.cell.mainLabel.text = brandModel;

self.cell.nicknameLabel.text = handguns.nickname;   

return self.cell;
}
于 2013-01-02T04:56:20.803 に答える