第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在故事板中,如何制作用于多個(gè)控制器的自定義單元?

在故事板中,如何制作用于多個(gè)控制器的自定義單元?

白衣染霜花 2019-08-14 17:26:40
在故事板中,如何制作用于多個(gè)控制器的自定義單元?我正在嘗試在我正在使用的應(yīng)用程序中使用故事板。在應(yīng)用程序中有Lists和Users,每個(gè)都包含其他列表(列表成員,用戶擁有的列表)。所以,相應(yīng)地,我有ListCell和UserCell課。目標(biāo)是讓它們?cè)谡麄€(gè)應(yīng)用程序中可重復(fù)使用(即,在我的任何tableview控制器中)。這就是我遇到問題的地方。如何在故事板中創(chuàng)建可在任何視圖控制器中重復(fù)使用的自定義tableview單元格?以下是我迄今為止嘗試過的具體內(nèi)容。在Controller#1中,添加了一個(gè)原型單元格,將類設(shè)置為我的UITableViewCell子類,設(shè)置重用ID,添加標(biāo)簽并將它們連接到類的出口。在Controller#2中,添加了一個(gè)空的原型單元格,將其設(shè)置為同一個(gè)類并重復(fù)使用id。當(dāng)它運(yùn)行時(shí),當(dāng)控制器#2中顯示單元格時(shí),標(biāo)簽永遠(yuǎn)不會(huì)出現(xiàn)。在Controller#1中正常工作。在不同的NIB中設(shè)計(jì)每種細(xì)胞類型,并連接到適當(dāng)?shù)募?xì)胞類。在storyboard中,添加了一個(gè)空的原型單元格并設(shè)置其類并重用id來引用我的單元類。在控制器的viewDidLoad方法中,為重用ID注冊(cè)了那些NIB文件。如圖所示,兩個(gè)控制器中的單元格都像原型一樣空。將兩個(gè)控制器中的原型保持為空并設(shè)置類并將id重用于我的單元類。完全用代碼構(gòu)建單元格的UI。細(xì)胞在所有控制器中都能完美運(yùn)在第二種情況下,我懷疑原型總是覆蓋NIB,如果我殺死原型單元,注冊(cè)我的NIB用于重用ID將起作用。但后來我無法設(shè)置從單元格到其他框架的segue,這實(shí)際上是使用故事板的重點(diǎn)。在一天結(jié)束時(shí),我想要兩件事:在故事板中連接基于tableview的流,并在視覺上而不是在代碼中定義單元格布局。到目前為止,我無法看到如何獲得這兩者。
查看完整描述

3 回答

?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊

盡管BJ Homer給出了很好的答案,但我覺得我有一個(gè)解決方案。就我的測(cè)試而言,它有效。

概念:為xib單元?jiǎng)?chuàng)建自定義類。在那里,您可以等待觸摸事件并以編程方式執(zhí)行segue。現(xiàn)在我們所需要的只是對(duì)執(zhí)行Segue的控制器的引用。我的解決方案是將其設(shè)置為tableView:cellForRowAtIndexPath:。

我有一個(gè)DetailedTaskCell.xib表格單元格,我想在多個(gè)表視圖中使用它:

TaskGuessTableCell該單元格有一個(gè)自定義類:

這就是魔術(shù)發(fā)生的地方。

// TaskGuessTableCell.h#import <Foundation/Foundation.h>@interface TaskGuessTableCell : UITableViewCell@property (nonatomic, weak) UIViewController *controller;@end// TashGuessTableCell.m#import "TaskGuessTableCell.h"@implementation TaskGuessTableCell@synthesize controller;- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    NSIndexPath *path = [controller.tableView indexPathForCell:self];
    [controller.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionNone];
    [controller performSegueWithIdentifier:@"FinishedTask" sender:controller];
    [super touchesEnded:touches withEvent:event];}@end

我有多個(gè)Segues,但它們都有相同的名字:"FinishedTask"。如果你需要在這里靈活,我建議添加另一個(gè)屬性。

ViewController看起來像這樣:

// LogbookViewController.m#import "LogbookViewController.h"#import "TaskGuessTableCell.h"@implementation LogbookViewController- (void)viewDidLoad{
    [super viewDidLoad]

    // register custom nib
    [self.tableView registerNib:[UINib nibWithNibName:@"DetailedTaskCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"DetailedTaskCell"];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    TaskGuessTableCell *cell;

    cell = [tableView dequeueReusableCellWithIdentifier:@"DetailedTaskCell"];
    cell.controller = self; // <-- the line that matters
    // if you added the seque property to the cell class, set that one here
    // cell.segue = @"TheSegueYouNeedToTrigger";
    cell.taskTitle.text  = [entry title];
    // set other outlet values etc. ...

    return cell;}- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"FinishedTask"])
    {
        // do what you have to do, as usual
    }}@end

可能有更優(yōu)雅的方法來實(shí)現(xiàn)相同但是 - 它的工作原理!:)


查看完整回答
反對(duì) 回復(fù) 2019-08-14
  • 3 回答
  • 0 關(guān)注
  • 504 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)