将 UITableView 推送到 UITableView

Posted

技术标签:

【中文标题】将 UITableView 推送到 UITableView【英文标题】:Pushing UITableView to UITableView 【发布时间】:2013-08-11 23:59:40 【问题描述】:

我似乎无法推送到另一个 UITableView。当我运行代码时,它只显示 EventType,单击时,它确实将推送发送到另一个 UITableView,显示事件。该代码假设将一个 UITableView 推送到另一个 UITableView。请有人可以帮我解决我遇到的这个问题。我认为它来自 RootViewController,但我似乎无法确定问题所在。

应用程序运行正常,但我无法推送到其他 TableViewController。 这是使用的代码。这是使用的代码,但它并没有真正透露太多,因为大多数设置都是使用 IB 完成的。

这是RootViewController.m - 我认为问题出在此,但我似乎无法确定出处。

#import "RootViewController.h"
#import "EventTypeViewController.h"

@interface RootViewController ()

@end

@implementation RootViewController
@synthesize eventType;



- (void) viewDidLoad

    eventType = [[NSMutableArray alloc]init];
    [eventType addObject:@"Corporate"];
    [eventType addObject:@"Social"];
    [eventType addObject:@"Dining"];
    [self setTitle: @"Events"];





- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView


    // Return the number of sections.
    return 1;



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


    return [eventType count];




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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];


         cell.textLabel.text = [[eventType objectAtIndex:indexPath.row]retain];
         [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

        return cell;


    




- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath



    EventTypeViewController *events = [[EventTypeViewController alloc] initWithNibName:@"EventTypeViewController" bundle:nil];

    if ([[eventType objectAtIndex:indexPath.row] isEqual:@"Corporate"])
    
        events.eventsInt = 0;
        [events setTitle:[eventType objectAtIndex:indexPath.row]];
    

    if ([[eventType objectAtIndex:indexPath.row] isEqual:@"Social"])
    
        events.eventsInt = 1;
        [events setTitle:[eventType objectAtIndex:indexPath.row]];
    

    if ([[eventType objectAtIndex:indexPath.row] isEqual:@"Dining"]) 
        events.eventsInt = 2;
        [events setTitle:[eventType objectAtIndex:indexPath.row]];
    

    [self.navigationController pushViewController:events animated:YES];



@end

我是EventTypeViewController.m - 我没什么好说的。

#import "EventTypeViewController.h"

@interface EventTypeViewController ()

@end

@implementation EventTypeViewController

@synthesize eventsInt;


- (void)viewDidLoad


    corporateArray = [[NSMutableArray alloc]
                      initWithObjects:@"Corporate 1", @"Corporate 2", @"Corporate 3", @"Corporate 4", nil];
    socialArray = [[NSMutableArray alloc]
                   initWithObjects:@"Social 1", @"Social 2", nil];
    diningArray = [[NSMutableArray alloc]
                   initWithObjects:@"Dining 1", @"Dining 2", @"Dining 3", nil];





#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

#warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 1;


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

    if (eventsInt == 0)
        return [corporateArray count];
    if (eventsInt == 1)
        return [socialArray count];
    if (eventsInt == 2)
        return [diningArray count];

    [self.tableView reloadData];



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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]autorelease];
    

    // Configure the cell...
    if (eventsInt == 0)
        cell.textLabel.text = [[corporateArray objectAtIndex:indexPath.row]retain];
    if (eventsInt == 1)
        cell.textLabel.text = [[socialArray objectAtIndex:indexPath.row]retain];
    if (eventsInt == 2)
        cell.textLabel.text = [[diningArray objectAtIndex:indexPath.row]retain];

    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

    return cell;


@end

【问题讨论】:

在设置单元格标签的文本时,不应保留存储在 eventType 数组中的字符串。 请同时显示您的 .h 文件。 IBOutlet NSMutableArray *eventType; @stevekohls 您也应该从numberOfRowsInSection: 中删除[self.tableView reloadData];。您只需要在查看时表数据发生变化时执行reloadData 它仍然没有被推送到另一个tableview @stevekohls 【参考方案1】:

您的 UITableViewController 是否嵌入了 UINavigationController?这样你就可以激活推送方法了。

您也可以使用转场。实现-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender,为那里的下一个控制器设置数据变量并使用[self performSegueWithIdentifier:(NSString *) sender:(id)sender]推送

【讨论】:

以上是关于将 UITableView 推送到 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Json 数据推送到 UITableView 中的标签?

iOS - UITableView 将 URL 推送到不同视图控制器中的 UIWebView

弹出视图控制器后 UITableview 丢失参考

将视图控制器从根推送到详细视图控制器 (SplitView)

如何从 UITableView 推送到新的 viewController?

将多个 UICollectionViewCell 推送到同一个 UIViewController