菜鸟教程小白 发表于 2022-12-13 13:37:13

ios - Objective-C 将 tableView indexPath 传递给另一个方法


                                            <p><p>我这里有这个 cellForRowAtIndexPath 方法:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = ;

    if (cell.accessoryView == nil) {

      cell.accessoryView = [ initWithFrame:CGRectMake(0, 0, 25, 43)];
      cell.accessoryView.opaque = NO;
      cell.backgroundColor = ;

      [(Checkbox*)cell.accessoryView addTarget:self action:@selector(checkBoxTapped:forEvent:) forControlEvents:UIControlEventValueChanged];
    }

    NSString *sectionTitle = ;
    NSArray *sectionContacts = ;
    NSString *contacts = [ valueForKey:@&#34;item&#34;];

    cell.textLabel.text = contacts;
    [(Checkbox*)cell.accessoryView setChecked: [[ valueForKey:@&#34;checkedItem&#34;] boolValue] ];

    return cell;
}
</code></pre>

<p>在这个方法里面,我有这行:</p>

<pre><code>[(Checkbox*)cell.accessoryView addTarget:self action:@selector(checkBoxTapped:forEvent:) forControlEvents:UIControlEventValueChanged];
</code></pre>

<p>调用这个方法</p>

<pre><code>- (IBAction)checkBoxTapped:(id)sender forEvent:(UIEvent*)event
{
}
</code></pre>

<p>我要做的是调整调用此方法的方式,因此我也传递了 int indexPath.row 编号</p>

<p>我开始这样做了:</p>

<pre><code>[(Checkbox*)cell.accessoryView addTarget:self action:@selector(checkBoxTapped:forEvent:rowNumber:) forControlEvents:UIControlEventValueChanged];
</code></pre>

<p>还有这个</p>

<pre><code>- (IBAction)checkBoxTapped:(id)sender forEvent:(UIEvent*)event rowNumber:(int)row
{
}
</code></pre>

<p>但我是选择器的新手,我的问题是我在哪里传递 rowNumber?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>正如您发现的那样,您不能使用选择器传递任何值,只能传递发送者和事件。这就是为什么您需要另一种方式传递行号的原因。</p>

<p>一种方法是使用控件上的 tag 属性并使用 <code></code> 检索它,但是如果在未调用 cellForRowAtIndexPath 的情况下更改了表索引,则此方法将失败。它也不适用于分段 TableView 。</p>

<p>更可靠的方法是使用 View 的位置来计算正确的行。 UITableView 有一个方便的方法来做到这一点:</p>

<pre><code>- (IBAction)checkBoxTapped:(id)sender forEvent:(UIEvent*)event {
    CGPoint checkBoxPosition = ;
    NSIndexPath *indexPath = ;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Objective-C 将 tableView indexPath 传递给另一个方法,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34813538/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34813538/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Objective-C 将 tableView indexPath 传递给另一个方法