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

ios - 从 nib 加载 UITableViewCell 的特殊方法


                                            <p><p>这是我发明的一种加载自定义单元格的方法</p>

<p>1) 我使用我的 UITableViewCell 类扩展</p>

<pre><code>//.h

@interface UITableViewCell (Extended)

+ (id) cellWithClass:(Class)class;

+ (id) cellWithClass:(Class)class fromNibNamed:(NSString *)nibName;

@end

//.m

+ (id) cellWithClass:(Class)class
{
    return ;
}

+ (id) cellWithClass:(Class)class fromNibNamed:(NSString *)nibName {

    NSArray * nibContents = [ loadNibNamed:nibName owner:self options:NULL];

    NSEnumerator * nibEnumerator = ;
    NSObject * nibItem = nil;

    while ((nibItem = ) != nil) {

      if () {
            return nibItem;
      }

    }

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

<p>2) 创建自定义 UITableViewCell 子类,使用同名的 .nib (CustomCell.xib) 我连接了所有 socket </p>

<pre><code>@interface CustomCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel * labelSmth;

- (void) setupWithTitle:(NSString *)title;

@end
</code></pre>

<p>2) 在 CustomCell.xib 中使用 Interface builder 我拖动一个 UITableViewCell 并使其成为 CustomCell 类(具有重用标识符 CustomCell)(我没有设置文件所有者)...而不是 UI 样式、连接 socket 等...</p>

<p>3) 比这样加载它</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * identifier = @&#34;CustomCell&#34;;

    CustomCell * cell = ;

    if (cell == nil) {

      cell = ];

    }

    ]];

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

<p>*<em>这种方法可以吗?这适用于许多项目,但我不确定重用标识符以及单元格是否被正确重用的事实...... *</em> </p>

<p>我也不确定这个</p>

<pre><code>NSArray * nibContents = [ loadNibNamed:nibName owner:self options:NULL];
</code></pre>

<p>当我在类方法中传递所有者 self 时...</p>

<p>Apple 也想出了</p>

<pre><code>- (void) registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)reuse;
</code></pre>

<p>这怎么可能适合我的方法?</p>

<p>以及如何使用自定义重用标识符,就像我想要一个方法一样</p>

<pre><code>+ (id) cellWithClass:(Class)class fromNibNamed:(NSString *)nibName reuseIdentifier:(NSString *)reuseIdentifier;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您无需为此发明新的东西。它已经为你发明了。您发明的是一种用于加载自定义单元格的常见反模式。</p>

<p>枚举 nib 内容以获取 nib 中的 UITableViewCell 不是正确的方法。</p>

<p>您应该在您创建 UITableViewCell(通常是 UIViewController)的 nib 的文件所有者中定义和输出您的 UITableViewCell。 </p>

<p>然后您可以使用此模式访问该单元格:</p>

<pre><code>- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {   
    static NSString *cellIdentifier = @&#34;MyCustomCell&#34;; //this should also be specified in the properties of the UITableViewCell in the nib file
    MyCustomCell *cell = ;
    if(!cell) {
      [ loadNibNamed:cellIdentifier owner:self options:nil];
      cell = self.myCustomCellOutlet;
      self.myCustomCellOutlet = nil;
    }   

    return cell;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 从 nib 加载 UITableViewCell 的特殊方法,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/11520093/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/11520093/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 从 nib 加载 UITableViewCell 的特殊方法