如何用长度未知的字符串替换字符串?

时间:2010-08-05 04:29:46

标签: objective-c nstableview

我正在构建一个使用以下对象的待办事项列表:

  1. NSTexField for data entry
  2. NSTableView显示数据(只是字符串对象)
  3. NSButton,点击后会将NSTextField的内容添加到NSTableView进行显示。
  4. 我想要做的是用另一个字符串替换NSTableView中任何行中的任何给定字符串。 例如,假设用户输入以下内容。

    1. 洗车
    2. 购买星际争霸II
    3. 升级显卡。
    4. 然后在第三行想要改变它 - 建立一个新的电脑。我怎样才能做到这一点?以下是我到目前为止的情况:

      #import "AppController.h"
      
      
      @implementation AppController
      
      -(id)init
      {
          [super init];
          [tableView setDataSource:self];
          [tableView setDelegate:self];
          array = [[NSMutableArray alloc ] init];
          //NSLog(@"this is my delegate %@",[tableView delegate]);
          return self;
      }
      
      -(IBAction)addItem:(id)sender
      
      {
          inputString = [textField stringValue];
          [array addObject:inputString];
          [tableView reloadData];
          return;
      }
      
      - (int)numberOfRowsInTableView:(NSTableView *)aTableView
      {
      
          return [array count];
      }
      
      - (id) tableView:(NSTableView *)aTableView
      objectValueForTableColumn:(NSTableColumn *)aTableColumn
                   row:(int)rowIndex
      {
          //NSLog(@"this is the object %@",[array objectAtIndex:rowIndex]);
          return [array objectAtIndex:rowIndex];
      }
      
      -(IBAction) replaceItem:(id)sender
      {
      
      
          NSLog(@"The selected row %d",[tableView selectedRow]);
          NSLog(@"The objectAtIndex is: %@",[array objectAtIndex:[tableView selectedRow]]);
          [array replaceObjectAtIndex:[tableView selectedRow ]  withObject: @"Micheal jordan"];
          [tableView reloadData];
          return;
      
      }
      - (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)
      aTableColumn row:(NSInteger)rowIndex
      
      {
          return YES;
      
      }
      
      
      @end
      

      附录: 我按照建议添加了一个新方法。它现在“有效”但不是我喜欢的方式。我想编辑NSTableView中的条目“在线”但我无法弄清楚如何操作。现在通过选择要编辑的行然后将新字符串放入NSTextField到NSTableView中来实现。

      #import "AppController.h"
      
      
      @implementation AppController
      
      -(id)init
      {
          [super init];
          [tableView setDataSource:self];
          [tableView setDelegate:self];
          array = [[NSMutableArray alloc ] init];
          //NSLog(@"this is my delegate %@",[tableView delegate]);
          return self;
      }
      
      -(IBAction)addItem:(id)sender
      
      {
          inputString = [textField stringValue];
          [array addObject:inputString];
          [tableView reloadData];
          return;
      }
      
      - (int)numberOfRowsInTableView:(NSTableView *)aTableView
      {
      
          return [array count];
      }
      
      - (id) tableView:(NSTableView *)aTableView
      objectValueForTableColumn:(NSTableColumn *)aTableColumn
                   row:(int)rowIndex
      {
          //NSLog(@"this is the object %@",[array objectAtIndex:rowIndex]);
          return [array objectAtIndex:rowIndex];
          //return [array replaceObjectAtIndex:[tableView selectedRow ]  withObject: @"Micheal jordan"];
      }
      - (void)tableView:(NSTableView *)aTableView
         setObjectValue:(id)anObject
         forTableColumn:(NSTableColumn *)aTableColumn
          row:(NSInteger)rowIndex
      {
      
          [array replaceObjectAtIndex:[tableView selectedRow] withObject:[textField stringValue]];
          return;
      }
      
      - (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)
      aTableColumn row:(NSInteger)rowIndex
      
      {
          return YES;
      
      }
      

1 个答案:

答案 0 :(得分:0)

首先,-tableView:shouldEditTableColumn:row:的默认设置为YES,因此您不需要 来实现它,尽管您稍后可能会选择限制某些行/列的编辑,所以把它留在那里很好。

除了你所做的,你错过了-tableView:setObjectValue:forTableColumn:row:的实现。如果你实现它并用你给出的对象值替换你的数组中的项目,一切都应该没问题。您甚至不需要重新加载数据。

编辑:我所描述的内容允许用户在表格视图中编辑相应的内容。然后,只需添加新项目即可显示您的按钮。