English 中文(简体)
• 如何通过在Peit强制设立一顿子,积极增加浏览量/小数。
原标题:How to add row/cells dynamically to an UITableView by pressing a button in iPhone

最初只有一张加顿的表格。

当用户报到时,Iton需要加固牢房,并增加以下囚室:

如何写上行刑,以及如何用点击添加新行子

页: 1

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return **????** ;
}

/ 囚室/牢房的内容

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

<><>/## Add New Row>##/strong>

-(IBAction)myAction:(id)sender
{
    ???????? ;
}

预告......

最佳回答

您的申请 当你在酒吧采取行动时,你必须给Array增加价值。

例如,在您的表态中,你正在细胞中展示安全感。 文本LABEL.text。 这些阵列位于NSMutable Array。

如今,纽托邦行动被叫作

in myAction

{
    NSString *newString =@"NEW CELL";

    [tableArray addObject:newString];
    [tableView reloadData];
}

在你对你的模式适用这一逻辑。

I hope this logic will be helpful to you.

问题回答

每当你想增加或删除行文时,再填表就会给您的申请用户带来不好的经验。 尽管执行这项任务缺乏有效的方法,但它也产生了一些负面的副作用,即选定的行文在重载后没有选择过,而且变化没有消减。

。 它们是:

insertRowsAtIndexPaths:withRowAnimation:
moveRowAtIndexPath:toIndexPath:
deleteRowsAtIndexPaths:withRowAnimation:

通知说,这些方法允许你具体说明在具体操作时将使用哪种算法,当你使用<代码>reloadData修改表观点内容时,你不能实现这种行为。

此外,你甚至可以采用表格观点的其他方法,将多种表格观点行动结合起来(没有必要):

beginUpdates endUpdates

仅凭您希望打上以下电话的封面操作:beginUpdatesendUpdates 方法和表格,将创造one<>>>>one <>em> animation for all operations which have been requested between beginUpdates and endUpdates calls to so that whole transition look nicer that one caused by a several separate animations.

[self.tableView beginUpdates]
//calls to insert/move and delete methods   
[self.tableView endUpdates]

保持数据来源状况与<编码>可调取的<>可调取的所保存的数据来源状况确实很重要。 为此原因,你必须保证,如果表上认为开始进行所要求的业务,其数据来源将恢复正确的价值。

[self.tableView beginUpdates]
//calls to insert/move and delete methods   
//operations on our data source so that its
//state is consistent with state of the table view
[self.tableView endUpdates]

当表看开始运行时? 这取决于业务是否在<代码>下定义的估算组中。 如果是,表认为在<代码>更新方法查询后开始运行。 否则,表认为在要求插入/删除或删除方法后,即可开展业务活动。

当你使用<代码>beginUpdates和 进行桌面业务时,你必须知道,在本个案表中,‚batches要求的行动按具体顺序进行,而不必与你在桌上表示的标语上发出的呼吁(

必须记住的是,在所有插入行动之前,删除所有业务。 此外,在按定购单进行插入操作时(指数3,2,1)似乎按退学顺序进行删除(指数1、2,3操作)。 记住这一点,即crucial,以保持贵国数据来源的状态,使之与表格中的数据保持一致。

在数据来源和表格上对业务进行分析的次序方面,有一段时间。

最后例子:

//initial state of the data source
self.numbers = [@[@(0), @(1), @(2), @(3), @(4), @(5), @(6)] mutableCopy];
//
//...
//

NSArray indexPathsToRemove = @[[NSIndexPath indexPathForRow:3 section:0].
                               [NSIndexPath indexPathForRow:0 section:0];
NSArray indexPathsToAdd = @[[NSIndexPath indexPathForRow:6 section:0],
                            [NSIndexPath indexPathForRow:5 section:0]];

[self.tableView beginUpdates];

[self.numbers removeObjectAtIndex:3];
[self.numbers removeObjectAtIndex:0];

[self.numbers insertObject:@(10) atIndex:4];
[self.numbers insertObject:@(11) atIndex:5];

[self.tableView insertRowsAtIndexPaths:indexPathsToAdd withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView deleteRowsAtIndexPaths:indexPathsToRemove withRowAnimation:UITableViewRowAnimationAutomatic];

[self.tableView endUpdates];
//final state of the data source ( numbers ) - 1, 2, 4, 5, 6, 10, 11

这里还有其他正确答案(你应该读到,因为它们更加深入),但我经过阅读了我可以找到的所有解决办法,就在一个多星期的时间里进行了斗争,因为有一点(我发现!)有全面的例子。

Rules for this to work: 1. Changes must be made directly to the array that contains the items you re displaying in the UITableView. If you set some value in a UITableViewCell in the tableView:cellForRowAtIndexPath: method to equal values in self.expandableArray, then changes must also be made to self.expandableArray in order for these methods to work.

  1. changes to the array of items that are displayed in the tableView must be made in-between [tableView beginUpdates] and [tableView endUpdates]
  2. The count of the indexPaths array must equal the count of the additional items you re adding to the tableView (I think that s obvious, but it doesn t hurt to point that out)

这里是一个非常简单的例子,可以自行工作。

    @interface MyTableViewController ()
@property (nonatomic, strong) NSMutableArray *expandableArray;
@property (nonatomic, strong) NSMutableArray *indexPaths;
@property (nonatomic, strong) UITableView *myTableView;
@end

@implementation MyTableViewController

- (void)viewDidLoad
{
    [self setupArray];
}

- (void)setupArray
{
    self.expandableArray = @[@"One", @"Two", @"Three", @"Four", @"Five"].mutableCopy;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.expandableArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //here you should create a cell that displays information from self.expandableArray, and return it
}

//call this method if your button/cell/whatever is tapped
- (void)didTapTriggerToChangeTableView
{
    if (/*some condition occurs that makes you want to expand the tableView*/) {
        [self expandArray]
    }else if (/*some other condition occurs that makes you want to retract the tableView*/){
        [self retractArray]
    }
}

//this example adds 1 item
- (void)expandArray
{
    //create an array of indexPaths
    self.indexPaths = [[NSMutableArray alloc] init];
    for (int i = theFirstIndexWhereYouWantToInsertYourAdditionalCells; i < theTotalNumberOfAdditionalCellsToInsert + theFirstIndexWhereYouWantToInsertYourAdditionalCells; i++) {
        [self.indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
    }

    //modify your array AND call insertRowsAtIndexPaths:withRowAnimation: INBETWEEN beginUpdates and endUpdates
    [self.myTableView beginUpdates];
    //HERE IS WHERE YOU NEED TO ALTER self.expandableArray to have the additional/new data values, eg:
    [self.expandableArray addObject:@"Six"];
    [self.myTableView insertRowsAtIndexPaths:self.indexPaths withRowAnimation:(UITableViewRowAnimationFade)];  //or a rowAnimation of your choice

    [self.myTableView endUpdates];
}

//this example removes all but the first 3 items
- (void)retractArray
{
    NSRange range;
    range.location = 3;
    range.length = self.expandableArray.count - 3;

    //modify your array AND call insertRowsAtIndexPaths:withRowAnimation: INBETWEEN beginUpdates and endUpdates
    [self.myTableView beginUpdates];
    [self.expandableArray removeObjectsInRange:range];
    [self.myTableView deleteRowsAtIndexPaths:self.indexPaths withRowAnimation:UITableViewRowAnimationFade];  //or a rowAnimation of your choice
    [self.myTableView endUpdates];
}

@end

我希望这节省了许多人的时间和头痛。 如果你这样做的话,你就不必重载整个表格,以更新该词,并且你可以选择一个动画。 自由守则,不打脚。

你只能增加阵列中的物体,并在纽特州点击重载你的表。

[array addobject:@""];
[tableview reloaddata];




相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。