簡體   English   中英

如何在界面生成器中快速制作許多視圖控制器?

[英]How to make lots of view controllers fast, in interface builder?

我正在制作一個具有表視圖和DetailViewController的應用程序。 我正在使用Apple的“ MultipleDetailViews”代碼作為啟動板。 我想使該應用在拆分視圖中具有約100行,並且我希望每行更改詳細信息視圖(讀取100個視圖)。 如何使用界面生成器執行此操作,而又不生成100個類文件並重復更改名稱?

目前,我唯一的方法是手動創建單獨的視圖控制器(帶有類文件)。 但是,這非常令人激動。

無論如何,我可以使用一個DetailViewController,在接口構建器中向其中添加幾個視圖,並在tableview中選擇一行時推送每個視圖。

在每個視圖上,我想添加一個背景圖像和三個包含不同聲音的按鈕(每行的視圖將具有三種獨特的聲音)。 如何僅創建三個IBAction並根據選擇的行更改聲音文件路徑?

有什么省時的方法可以完成我要問的事情嗎?

100個視圖控制器類? 不好

一個視圖控制器類的100個實例? 我不希望這樣。

讓我們了解一下用2來描述的行為。您有一個用於表視圖的控制器和一個用於詳細視圖的控制器。 而已。

當您在表視圖中選擇一行時,將該行索引傳遞給詳細視圖控制器,並為詳細視圖控制器提供一種基於該行加載正確的圖像和聲音的方法。

這可能來自圖像和聲音資源的命名約定(“ background0”,“ background1”,...),也可能來自某個配置文件,該文件定義了背景圖像和每一行的聲音(包含字典數組:[{background:“ moon.png”,firstSound:“ clown.mp3”,secondSound:“ moose.mp3”,thirdSound:“ water.mp3},{...},...])。

聽起來每個細節視圖都足夠相似,您可以創建一個UIViewController實例,並在每次點擊一個單元格時重新配置它。 這是一個示例,說明如何更改MultipleDetailViews項目以根據選擇的行來更改單個UIViewController實例的背景色。

static const NSUInteger kRowCount = 100;

- (void)viewDidLoad {
    [super viewDidLoad];
    self.contentSizeForViewInPopover = CGSizeMake(310.0, self.tableView.rowHeight*kRowCount);
    // Create an array of colors to cycle through
    self.colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
}

#pramga mark - UITableViewDataSource methods

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
    return kRowCount;
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Dequeue or create cell
    cell.textLabel.text = [NSString stringWithFormat:@"View Controller #%d", indexPath.row + 1];
    return cell;
}

#pramga mark - UITableViewDataDelegate methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Don't create a new view controller, just reconfigure the on that is already displayed
    DetailViewController *dvc = [self.splitViewController.viewControllers objectAtIndex:1];
    dvc.view.backgroundColor = [colors objectAtIndex:(indexPath.row % [colors count])];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM