菜鸟教程小白 发表于 2022-12-12 10:40:27

ios - 从自定义 UITableViewCell 和 UIViewController 传递数据


                                            <p><p>我(相当)熟悉在 UIViewController 之间传递数据的 segue 和委托(delegate),但我目前的情况略有不同,我无法让它工作。上下文:XCode 5 和 iOS7 与 Objective C。</p>

<p>我有一个表格 View (动态原型(prototype)),它加载包含 UILabel 和 UISwitch 的自定义单元格(来自单独的 nib)。 CustomCell.xib 从 CustomCell.h/m 加载其数据。主要内容在 ViewController.h/m 中,在该文件中,我需要知道开关值是否更改(或者实际上是 UISwitch 的新值)。显然我在 CustomCell.h/m 文件中知道这一点,但需要将它们传递给 ViewController.h/m。</p>

<p>我尝试使用委托(delegate),但我无法为 UINib 实例设置委托(delegate)(与在 ViewController 的实例上设置委托(delegate)相反)。此外,自定义单元格是在 ViewController 中实现的,因此它不会像另一个 ViewController 在导航堆栈中那样被推送。</p>

<p><strong>CustomCell.h</strong></p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;

@protocol CustomCellDelegate &lt;NSObject&gt;

- (void)switchControlValueChanged:(UISwitch*)switchControl toNewValue:(BOOL)value;

@end

@interface CustomCell : UITableViewCell

@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
@property (nonatomic, weak) IBOutlet UISwitch *switchControl;
@property (nonatomic, assign) id &lt;CustomCellDelegate&gt; delegate;

- (void)setValueForSwitchControlTo:(BOOL)value;
- (IBAction)changeColorForSwitchControl;

@end
</code></pre>

<p><strong>CustomCell.m</strong></p>

<pre><code>- (void)changeColorForSwitchControl // value changed method
{
    ...
    ;
}
</code></pre>

<p><strong>ViewController.h</strong></p>

<pre><code>#import &lt;UIKit/UIKit.h&gt;
#import &#34;CustomCell.h&#34;

@interface ViewController : UITableViewController &lt;CustomCellDelegate&gt;
...
@end
</code></pre>

<p><strong>ViewController.m</strong></p>

<pre><code>- (void)viewDidLoad
{
    ...
    // cannot set a delegate on the cellNib
    UINib *cellNib = ;
    ;
}

- (void)switchControlValueChanged:(UISwitch *)switchControl toNewValue:(BOOL)value
{
    NSLog(@&#34;Switch changed!&#34;); // this is not getting displayed
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>将您的 ViewController 设置为您的单元格的代表的正确时间是在您设置单元格的其他属性时。您可以在 <code>tableView:cellForRowAtIndexPath:</code> 中执行此操作。</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = ;
    ...
    cell.delegate = self;
    return cell;
}
</code></pre>

<p>旁注:<code>registerNib:forCellReuseIdentifier:</code> 完全按照它所说的去做,它只是<em>注册</em>你的 Nib 以供重复使用。在表格 View 决定这样做之前,不会加载 nib 的内容。它会在需要时创建包含在 Nib 中的单元格的副本。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从自定义 UITableViewCell 和 UIViewController 传递数据,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24587243/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24587243/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从自定义 UITableViewCell 和 UIViewController 传递数据