【问题标题】:Getting the data of a particular row with a button infront of it and passing that data to the clickButton function使用前面的按钮获取特定行的数据并将该数据传递给 click Button 函数
【发布时间】:2012-10-01 12:12:52
【问题描述】:

我目前在 cellForRow 方法中,每行前面都有一个按钮。

CellForRow:
JSONDecoder *decoder=[[JSONDecoder alloc] initWithParseOptions:JKParseOptionNone];
NSMutableArray *json=[decoder objectWithData:myData]; {This has a list of items in the dictionary format}

NSDictionary *dict=[json objectAtIndex:indexPath.row]; 
NSString *status=[dict valueForKey:@"status key in json"];

"dict" can be represented as:
{
   status key in json="approved";
   name="abc";
   type="resourceName";
},
{
   status key in json="rejected"; 
   name="xyz";
   type="bus";

},
{
   status key in json ="pending";
   name="pqr";
   type="resource";  
 }...and so on .

打印状态将为我提供所有行的状态。 得到正式认可的 被拒绝 待定

但我只需要我要单击该按钮的特定行的状态。这是因为当我单击该行前面的按钮时,我需要将每一行的状态分别发送到 buttonPressed 方法。我不想在 didSelectRow 方法中这样做。

如何获取特定行的 indexPath.row(单击该行),以便在单击与该特定行对应的按钮时编写方法?

【问题讨论】:

  • 您的问题解决了吗?有什么问题吗?

标签: iphone objective-c xcode ios5


【解决方案1】:

您只需将按钮添加为单元格的子视图,并将 indexpath.row 作为按钮标记传递。就是这样。

我已经给出了样本

//创建你的单元格然后执行以下操作

UIButton *objBtn=[UIButton buttonWithType:UIButtonTypeCustom];
[objBtn setFrame:CGRectMake(100,5,50,50)];
[objBtn addTarget:self action:@selector(methodWhichGetsCallOnButtonClick:)forControlEvents:UIControlEventTouchUpInside];
objBtn.tag = indexPath.row;
[cell addSubview:objBtn];

现在在“methodWhichGetsCallOnButtonClick”方法中添加你的业务逻辑。

Also take a look on this question.

编辑:

Also See this link

试试这个,如果需要更多帮助,请回复我。

【讨论】:

  • shikha 你有没有试过上面贴的这个逻辑,也看看我提供的链接。
  • 我正在执行相同的程序。但我在这里没有遇到任何问题。我只想在 cellForRow 方法中获取与特定行相对应的数据。再看看我的问题。如果我打印 NSLog(@"%@",status) 我将获得所有行的状态。但我只想要特定行的状态
  • 当我点击第一行(不是按钮)时,“已批准”应该打印在控制台上。单击第二行时,应在控制台上打印“拒绝”...等等...有很多行
  • Shikha,看看我们这里的逻辑,将一个按钮添加到一个单元格作为子视图。我们正在设置它的选择器(按钮单击操作的方法),因此如果您选择单元格,则“didSelectRowAtIndexPath”方法将被调用,如果您单击按钮,则其相关方法将被调用(在我们的条件下,它是:方法WhichGetsCallOnButtonClick)。所以按钮点击的所有逻辑都在这里。请让我清楚一件事,您希望在 CELL CLICKBUTTON CLICK 上打印该字符串
  • 这很矛盾,你的问题是 (获取特定行的数据,前面有一个按钮并将该数据传递给 clickButton 函数) 现在你想要点击单元格你能把这些东西清理掉吗,这样可以帮助我们以这种方式进行。
【解决方案2】:

如果我没记错,您希望单击按钮上的单元格的 indexPath。您可以按如下方式获取该按钮的单元格(在按钮操作中):

UIButton *theButton = sender;
CreatedCell *cell = (CreatedCell *)[[theButton superview] superview];

获取cell后,可以得到该cell的indexPath如下:

theIndexPath = [[m_TableView indexPathForCell:cell] retain];

【讨论】:

  • 在单击按钮之前,我需要单元格的 indexPath。这就是为什么我在 cellForRow 方法中需要它
  • indexPath.row 没有帮助,因为它为我提供了所有行的状态。
  • 你想在 cellForRowAtIndexPath 的每个单元格中显示状态,对吧?
【解决方案3】:

你可以对 UIButton 使用标签。

在 cellForRowAtIndexPath 方法中

您将标签设置为像这样的按钮

btn.tag=indexpath.row;

在按钮操作方法中,您可以使用此行检索标记值

按钮的动作方法 -(void)btnAction:(id)sender

{

UIButton *btn=(UIButton *) 发送者;

int tagValue=btn.tag; NSDictionary *dict=[json objectAtIndex:tagValue];

// 从这个字典中你不能访问状态键值

}

希望对你有用

【讨论】:

  • 我正在使用相同的。但无论我单击的按钮如何,我都需要该行的数据。请忘记按钮。我只需要 cellFowRow 方法中特定行的数据。
  • 使用这种代码有什么问题?你没有访问数组?
  • 我正在执行相同的程序。但我在这里没有遇到任何问题。我只想在 cellForRow 方法中获取与特定行相对应的数据。再看看我的问题。如果我打印 NSLog(@"%@",status) 我将获得所有行的状态。但我只想要特定行的状态
  • 当我点击第一行(不是按钮)时,“已批准”应该打印在控制台上。单击第二行时,应在控制台上打印“拒绝”...等等...有很多行
  • 你NSLog是用BtnAction方法还是cellForRowAtIndex方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2022-07-12
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多