Xcode didSelectRowAtIndexPath on tableview not called

时间:2012-09-30 13:09:25

标签: xcode uitableview uiviewcontroller didselectrowatindexpath

我一直在寻找今天早上6点,但我无法弄清楚为什么没有调用didSelectRowAtIndexPath方法。我对此非常绝望。

桌面视图显示正确,但我无法启用选择单元格。

在头文件中,我添加了:

@interface AlertsTable : UIViewController<UITableViewDelegate, UITableViewDataSource, CMPopTipViewDelegate>{
    UITableView *TableView;
}

@property (nonatomic, retain)   UITableView *TableView;

在实施文件中:

@synthesize TableView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;


    //Set the title


    //Format Alerts table
    //self.view.backgroundColor = [UIColor redColor];
    CGFloat sideMargin = 10;
    CGFloat topBottomMargin = 44;
    CGFloat originX = sideMargin;
    // compute width based on view size
    CGFloat sizeWidth = (self.view.bounds.size.width - (sideMargin * 2));
    CGFloat originY = topBottomMargin;
    // compute height based on view size
    CGFloat sizeHeight = (self.view.bounds.size.height - (topBottomMargin * 2));
    //self.view.frame = CGRectMake(originX, originY, sizeWidth, sizeHeight);

    self.TableView = [[UITableView alloc] initWithFrame:CGRectMake(originX, originY, sizeWidth, sizeHeight) style:UITableViewStylePlain];


    //Initialize the array.
    AlertsItems = [[NSMutableArray alloc] initWithObjects: @"Alert 1", @"Alert 2", @"Alert 3" , @"Alert 4", @"Alert 5", @"Alert 6", nil];

[self.TableView setDelegate:self];
[self.TableView setDataSource:self];
[self.view addSubview:TableView];
TableView.userInteractionEnabled = YES;
TableView.allowsSelection = YES;
TableView.allowsSelectionDuringEditing = YES;
NSLog(@"delegate:%@ dataSource:%@", self.TableView.delegate, self.TableView.dataSource);

}

代表和数据源在支票上都不是零 请注意,“Alertstable”继承自UIViewController,而不是UITableViewController 由于我选择的实现,这是必要的:tableview显示在屏幕上显示的弹出窗口中(使用我从互联网上获取的另一个类)。

这是didSelectRowAtIndexPath方法:

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *alertString = [NSString stringWithFormat:@"Clicked on row #%d", [indexPath row]];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertString message:@"" delegate:self cancelButtonTitle:@"Done" otherButtonTitles:nil];
    [alert show];

}

方法:

[super touchesBegan:...];  
[super touchesEnded:...];  
[super touchesMoved:...];  

未实施。

我从另一个ViewController

添加了AlertTable
AlertsTable *AlertTable = [[AlertsTable alloc] WithButton:sender withArray:self.PopTipViews];
[self.view addSubview:AlertTable.view];

我也实施了:

- (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:CellIdentifier];
    }

    // Set up the cell...
    [[cell textLabel] setText:[AlertsItems objectAtIndex:indexPath.row]];
    NSLog (@"%@",[AlertsItems objectAtIndex:indexPath.row]);
    return cell;

}

你知道问题是什么吗? 我在Xcode方面不是很有经验,我真的很困难。

编辑:

我知道这不是自定义的,但是可以在这里找到项目的链接(也许我忽略了一些东西:

https://www.bilbu.be/BarConnect_v2.zip

LoginViewController.xib没有正确链接(它在en.lproj子文件夹中可用),所以你可能需要先链接(我注意到太晚了,我之前有一个朋友上传的文件 - 我无法重新上传我不幸的是。) ViewController VC类调用AlertsTable VC类。项目中还有更多我认为你可以忽略的...... 请注意,此项目的目的仅用作可视化界面原型。它并不意味着是最优化的应用程序(这是其他开发人员将要做的)。如果这不起作用,我将使用Photoshop来创建界面,但我想这不会令人信服......

2 个答案:

答案 0 :(得分:2)

我成功编译了你的项目。问题是你违背了MVC模式。控制器(AlertsTable)位于视图(CMPopTipView)内。我建议你重新考虑一下控制器和视图的层次结构。希望这会对你有所帮助。

答案 1 :(得分:0)

尝试更改

TableView.userInteractionEnabled = YES;
TableView.allowsSelection = YES;
TableView.allowsSelectionDuringEditing = YES;

self.TableView.userInteractionEnabled = YES;
self.TableView.allowsSelection = YES;
self.TableView.allowsSelectionDuringEditing = YES;

你在分配self.TableView吗?有点像...

self.TableView = [[UITableView alloc] init];//[[UITableView alloc] initWithStyle:UITableViewStylePlain];