我知道dequeueReusableCellWithIdentifier:forIndexPath是由tableviewcontroller中的tableView方法调用的。如果我理解正确,则会多次调用tableView方法,直到填充了所有单元格。但我不知道的是,您从哪里获得参数IndexPath的值?我想使用dequeueReusableCellWithIdentifier:forIndexPath作为我创建的方法,因为我想访问我的单元格以复制其属性的某些值。
注意: 我已经填充了我的单元格,这意味着我成功使用了方法tableView。
(编辑)附加信息 我正在尝试创建个人资料并编辑个人资料表格视图。在配置文件tableview中,我显示了用户的姓名,地址,联系人#等。另外,我有一个名为编辑个人资料的segue。在编辑配置文件中,我有每个类别(名称,地址等)的文本字段。我想要做的是,如果我编辑文本字段的内容,我应该能够在我的配置文件tableview中显示新内容。一个示例案例是:在个人资料视图中我显示 - > name:human,address:earth(每个都在自己的单元格中)。现在,如果我去editprofile tableview,我将编辑内容,以便 - >姓名:外星人,地址:火星。之后,有一个名为' apply'的按钮。结束内容编辑并返回配置文件tableview。如果我回到个人资料视图,显示现在应该是名字:外星人,地址:火星而不是名字:人类,地址:地球。
以下是一些代码,如果有任何帮助的话。该代码由tableviewcontroller中的按钮调用。 "&了myCell#34;是我的细胞类。此代码无法正常运行。我希望有人可以帮我解决这个问题。
- (IBAction)updateCopies:(id)sender {
static NSString *ident = @"MyCell";
NSIndexPath *indexPath;
//create cell
MyCell *cell = [self.tableView dequeueReusableCellWithIdentifier:ident forIndexPath:indexPath];
//create variable for accessing cells
int row = [indexPath row];
_labelValues[row] = cell.textField.text
}
答案 0 :(得分:2)
当您需要为要显示的单元格提供表格视图时,您应该只使用dequeueReusableCellWithIdentifier
。如果要在特定索引处获取UITableViewCell对象,则应使用cellForRowAtIndexPath。
您的问题
你真正需要的是一个模型类。然后,您可以将其传递给编辑控制器,从而更改属性。然后当您返回tableView时,可以重新加载它并显示新属性。
您还可以为编辑配置文件控制器创建一个委托协议,例如EditProfileViewControllerDelegate
,如下所示:
protocol EditProfileViewControllerDelegate {
- (void)editProfileViewController:(EditProfileViewController *)controller didUpdateName:(NSString *)name address:(NSString *)address;
}
您可以在表视图控制器中实现此委托,并在更改文本时使用它来更新值。但是,这很快变得笨拙,我不建议使用适当的模型类。
答案 1 :(得分:0)
使用此
- (IBAction)updateCopies:(id)sender {
MyCell *parentCell = (MyCell *)sender.superview;
while (![parentCell isKindOfClass:[MyCell class]]) { // iOS 7 onwards the table cell hierachy has changed.
parentCell = parentCell.superview;
}
UIView *parentView = parentCell.superview;
while (![parentView isKindOfClass:[UITableView class]]) { // iOS 7 onwards the table cell hierachy has changed.
parentView = parentView.superview;
}
UITableView *tableView = (UITableView *)parentView;
NSIndexPath *indexPath = [tableView indexPathForCell:(MyCell *)parentCell];
NSLog(@"indexPath = %@", indexPath);
}
答案 2 :(得分:0)
您可以使用CGPoint获取indexPath。您可以使用dequeueResusableCell来重用该单元格。
- (IBAction)updateCopies:(id)sender {
CGPoint position = [sender convertPoint:CGPointZero
toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:position];
//create variable for accessing cells
MyCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
int row = [indexPath row];
_labelValues[row] = cell.textField.text
}
希望它可以帮助你..
答案 3 :(得分:0)
嗯,我得到了你想要完成的任务。
首先,当您单击/选择一个单元格并转到“编辑个人资料”页面时,会调用delegate
。那个代表是
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
///
}
创建一个全局变量,例如selectedIndexPath
,它保存正在编辑的当前单元格索引路径。每次进入编辑个人资料页面时都会更新此值。
喜欢这个
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
selectedIndexPath = indexPath;
// code to go to edit page...
}
现在在updateCopies
方法中,请执行此操作
- (IBAction)updateCopies:(id)sender {
//get the existing cell with the indexPath
[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[selectedIndexPath]];
[self.tableView endUpdates];
//rest of your code goes here...
}