ViewController有表视图,一个按钮和标签。我的任务:选择任何行,然后按下按钮,所选行中的文本必须出现在标签中。 我应该做什么以及如何做?
我已经熟悉了代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIAlertView *messageAlert = [[UIAlertView alloc]
initWithTitle:@"Row Selected" message:@"You've selected a row" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];`
[messageAlert show];
}
在这种情况下,您会在选择任何一行时收到提醒信息。
非常感谢。
答案 0 :(得分:2)
在- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
中检索[[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]
的返回值并将其存储在属性中。因此,每次用户更改所选单元格时,您的属性都会更新为当前所选单元格的文本。然后,为按钮创建一个方法并将其连接起来。按下按钮时,将界面中标签的文本值设置为属性。
在顶部的@interface
部分(位于.h文件中),将其放入。
@property (nonatomic, copy) NSString* selectedCellText;
在@implementation
部分(位于.m / .mm文件中)放入此内容。
@synthesize selectedCellText = _selectedCellText;
您现在有一个实例变量_selectedCellText
,您可以使用两种方法访问它们。这被称为财产。使用[self setSelectedCellText]
(“setter”)进行设置,使用[self selectedCellText]
(“getter”)获取值。或者,使用点表示法,这将为您完成(始终将其称为self.selectedCellText
)。当然,self
只能在内部使用;如果另一个对象有指向此实例的指针,则使用该对象而不是self
。
对于- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
,请执行此操作。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
}
现在,在任何给定时间(如果您已正确设置表格),self.selectedCellText
将包含当前所选单元格的文本。因此,连接UILabel和UIButton,并通过目标操作使按钮调用方法。如果您正在使用笔尖/故事板,请将它们拖到界面中。在助理编辑器中按住Ctrl键从标签拖动到界面部分,Xcode将提示您创建插座;让我们将这个新属性命名为myLabel
。按住Ctrl键从按钮拖动到实现部分,让Xcode创建一个触摸按钮时要调用的方法。我们将其命名为labelTextUpdate
,并将arguments
设置为none
。 Xcode将创建该方法,因此在其中插入此代码。
self.myLabel.text = self.selectedCellText;
你已经完成了!每当用户触摸表时,属性都会更新为单元格中包含的标签的文本。当用户触摸按钮时,labeltextUpdate
被调用,用户界面中的标签将更新为我们属性中的文本,该文本将是他们之前选择的单元格中包含的任何文本。
当然,这提供了我没有忘记任何事情,因为这是来自记忆。我鼓励您阅读有关Objective-C和iOS / Mac OS开发的任意书籍之一,并阅读Apple的文档。
我测试了它,它的工作原理。这是结果。
我也意识到有一种更好的方法,没有文本属性或委托方法didSelectRowAtIndexPath
。在按钮方法中,只需查询您的表视图以获取当前选定的单元格,询问其标签,然后获取其文本并将其应用于您的标签。它应该只采用一行或两行代码,而且不那么容易混淆。