导航控制器从故事板到XIB?表格单元格的编码不适用于Storyboard?使用XIB?

时间:2014-11-05 19:05:08

标签: ios objective-c xcode storyboard xib

我最初有一个功能最强大的应用程序,我有一些挂机。我试图使用XIB文件为滚动条和表格等内容进行特定编码。当我尝试从XIB导航回故事板时,问题出现了。我在另一个网站上发布了我的问题,发现我没有正确浏览我的应用程序,因为我没有使用导航控制器。

我从应用程序开始,现在我的导航控制器问题得到了解决。该应用程序看起来好多了。现在我遇到了一个问题,这个问题首先引发了我所有这一切。我正在尝试在应用程序中执行一些涉及表格,滚动和地图功能的更复杂的页面。似乎我尝试做的某些代码只能在新的XIB文件中构建视图时才能正确执行。如果我在.h或.m文件中为我的故事板上的视图控制器尝试相同的代码,并将该类应用于它,我将得到我不明白的错误。对于某些事情,它似乎工作正常。使用按钮推送视图,并重定向到YouTube / Safari都可以正常工作。我知道所有关于类,定义动作并在.h和.m文件中编码它们,所以我知道代码是正确的。如果我尝试使用表格或滚动条,它似乎只能在XIB中工作。

我正在尝试在故事板上的一个View Controller中进行滚动表视图。我已经尝试过使用带有表格视图的View Controller,以及一个直接的Table View Controller。我试过的方法都没有正常工作。基本模板工作正常,但是当我尝试使用它进行任何编码时,我会被拒之门外。我观看了几个YouTube教程,我尝试过的两种方法都引发了错误,并在该视图控制器上崩溃了应用程序。

我在创建滚动视图时遇到了类似的问题。这是让我最初在XIB中创建我的观点的原因,因为看起来代码在该方法下运行得很好。但后来我遇到了从XIB导航到故事板的问题,这是我开始的问题。我似乎无法在XIB中嵌入导航控制器并使其在故事板上正常工作,这会引发更多问题(这就是为什么我在原始帖子中创建自己的后退按钮)。我只是试着搞乱,因为我真的不知道我在做什么。我通过在线教程了解其中的一些内容,但随后出现了这些非常具体的问题,我无法找到答案。

这些教程大多涉及一个或两个视图控制器,它们是简单的教程。是否只有一些你只能从XIB中做的事情?表视图,UIScrollView,只是问题。我做的其他所有工作都很好,主要是推送视图和重定向到Safari,但仍然如此。如果我可以在一个故事板视图控制器中完成我可以在XIB视图中执行的所有操作,那么它将变得更容易,但似乎并非如此。我错了吗?

我想说这个的简短方法是

1)我可以在故事板视图控制器中执行与XIB中相同的代码吗?如果我有一个单独的XIB来设计视图,为什么我尝试的某些东西似乎才有效? (例如UITableViewController UITableView)

2)是否可以无缝地使用XIB和Storyboard?我在XIB中使用导航控制器时遇到了麻烦,同时在故事板上也使用了导航控制器。有没有正确的方法来做到这一点?


抱歉,我发布这个时没有xCode,所以我只是想尽可能具体。我将尝试解释我目前正在做的事情,这样我就可以减少混乱。

以下是我的ArtViewController.m中的代码,该代码分配给我的View Controller,其中包含一个表格视图:

{

    NSArray *titleArray;
    NSArray *logoFileArray;

}

@end

@implementation ArtViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

titleArray = [[NSArray alloc]initWithObjects:@"Frauenthal Center for Performing Arts",@"Muskegon Museum of Art",@"L.C. Walker Arena","Howmet Playhouse", nil];
    logoFileArray = [[NSArray alloc]initWithObjects:@"",@"",@"","", nil];
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{
    return titleArray.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
    static NSString *CellIdentifier = @"Cell";
    ArtCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell)
    {
        cell = [[ArtCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.firstLabel.text = [titleArray objectAtIndex:indexPath.row];
    cell.myImageView.image = [UIImage imageNamed:[logoFileArray objectAtIndex:indexPath.row]];

    return cell;
}

我的ArtViewController.h有一个这样的属性:

@property (weak, nonatomic) IBOutlet UITableView *artTableView;

然后我用我的ArtCell.h(UITableViewCell):

@property (weak, nonatomic) IBOutlet UIImageView *myImageView;

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

这是我的ArtCell.m,但我认为我没有改变任何东西:

- (void)awakeFromNib {
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

当我运行应用程序时,它在ArtViewController崩溃并在这里给我一个错误:

titleArray = [[NSArray alloc]initWithObjects:@"Frauenthal Center for Performing Arts",@"Muskegon Museum of Art",@"L.C. Walker Arena","Howmet Playhouse", nil];

错误是THREAD 1:EXC_BAD_ACCESS(code = EXC_I386_gpflt)。

2 个答案:

答案 0 :(得分:0)

您发布了很长的故事,没有提供任何您遇到问题的代码示例。简而言之,然后回答你的问题是和是。

您在Storyboard或XIB文件中创建/更改的所有内容也可以直接从代码中执行。当然,这不是推荐的方式,特别是如果您计划在未来扩展和支持您的应用程序。有些事情在故事板中更容易做(比如自动布局约束)

您还可以混合和匹配Storyboard和XIB文件。在故事板中拥有主应用程序布局和流程并在单个XIB文件中定义单独的复杂视图或表格单元格是很常见的。

我建议您尝试隔离您的问题。如果您认为表视图存在问题 - 使用一个表视图和简单数据源创建一个示例项目。确保它使用Storyboard或直接代码。然后看看如何将您的知识应用到您正在进行的主项目中。

答案 1 :(得分:0)

titleArray = [[NSArray alloc] initWithObjects:@"Frauenthal Center for Performing Arts",@"Muskegon Museum of Art",@"L.C. Walker Arena","Howmet Playhouse", nil];

数组中的最后一个字符串isn&t; t。您在@开头没有"Howmet Playhouse"

你问题的前95%是无关紧要的:)