tablecell 背景仅显示自定义单元格,但显示自定义单元格使其无法选择

tablecell background only displays custom cell but displaying custom cell renders it unselectable

我创建了自定义 tableCell 当我通过 backgroundView 将 xib 连接到文件所有者时,我成功地让项目出现在我的 table 中。问题是我无法连续 select 并获得 return.

如果我取消select backgroundView,则我的自定义单元格不会填充,但我可以select 单元格并提取通知。我显然希望这两个项目都有效。显示我的自定义单元格并能够 select 特定单元格。

GameTableCell.m

#import "GameTableCell.h"

@implementation GameTableCell
@synthesize GameTime, AwayImage, HomeImage;


- (void)awakeFromNib {
    // Initialization code
}


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

    // Configure the view for the selected state
}
/*
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}
*/

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"GameTableCell" owner:self options:nil];
    self = [topLevelObjects objectAtIndex:0];
    return self;
}

@end

GameTable.h:

#import <UIKit/UIKit.h>

@interface GameTableCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *GameTime;
@property (weak, nonatomic) IBOutlet UIImageView *AwayImage;
@property (weak, nonatomic) IBOutlet UIImageView *HomeImage;


@end

HomePage.m:

 #import "HomePage.h"
    #import "PickSport.h"
    #import "GameTableCell.h"

    static NSString *CellIdentifier = @"GameTableCell";
    NSString *headerText;

    @interface HomePage ()

    @end

    @implementation HomePage
    @synthesize ActiveChal,PendingChal;

    -(IBAction)makeChallenge:(id)sender{
        PickSport *second = [[PickSport alloc] initWithNibName:@"PickSport" bundle:nil];
        [self presentViewController:second animated:YES completion:nil];
    }

    - (void)viewDidLoad {
        [super viewDidLoad];

        // Arrays for filling table cells
        _HomeImages=@[@"ic_bengals_nfl",@"ic_bengals_nfl",@"ic_bengals_nfl",@"ic_bengals_nfl", ];
        _AwayImages=@[@"ic_bears_nfl",@"ic_bears_nfl",@"ic_bears_nfl",@"ic_bears_nfl", ];
        _SportGameInfo=@[@"7:00pm",@"8:00pm",@"9:00pm",@"10:00pm",];
        [self.PendingChal registerClass:[GameTableCell class] forCellReuseIdentifier:CellIdentifier];
        [self.ActiveChal registerClass:[GameTableCell class] forCellReuseIdentifier:CellIdentifier];


    }

    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }


    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }
    //Set up the table props
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 1;
    }

    //number of rows in the table
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

        // rows eqiv to length of array SportGameinfo
        return _SportGameInfo.count;
    }


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdentifier=@"GameTableCell";
          GameTableCell *cell = (GameTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        //GameTableCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }

       if(tableView == PendingChal){
               NSLog(@"in Pend table");
       int row =[indexPath row];
           cell.HomeImage.image=[UIImage imageNamed:[_HomeImages objectAtIndex:indexPath.row]]; //thumbnails objectAtIndex:indexPath.row]
            cell.AwayImage.image=[UIImage imageNamed:[_AwayImages objectAtIndex:indexPath.row]];
            cell.GameTime.text=[_SportGameInfo objectAtIndex:indexPath.row];
                                     }

       if(tableView == ActiveChal){
            NSLog(@"in Active table");
            int row =[indexPath row];
            cell.GameTime.text=_SportGameInfo[row];
            cell.HomeImage.image=[UIImage imageNamed:_HomeImages[row]];
            cell.AwayImage.image=[UIImage imageNamed:_AwayImages[row]];
            }
        return cell;
    }


    -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        // 1. The view for the header
        UIView* headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 22)];
        if(tableView == PendingChal){
            headerText= @"Pending Challenges (waiting on you)";
        }
        else {
            headerText= @"Active Challenges";
                }
        // 2. Set a custom background color and a border
        headerView.backgroundColor = [UIColor colorWithWhite:0.5f alpha:1.0f];
        headerView.layer.borderColor = [UIColor colorWithWhite:0.5 alpha:1.0f].CGColor;
        headerView.layer.borderWidth = 0;

        // 3. Add a label
        UILabel* headerLabel = [[UILabel alloc] init];
        headerLabel.frame = CGRectMake(0, 0, tableView.frame.size.width -0, 20);
        headerLabel.backgroundColor = [UIColor blackColor];
        headerLabel.textColor = [UIColor whiteColor];
        headerLabel.font = [UIFont boldSystemFontOfSize:16.0];
        headerLabel.text = headerText;
        headerLabel.textAlignment = NSTextAlignmentLeft;
        // 4. Add the label to the header view
        [headerView addSubview:headerLabel];
        // 5. Finally return
        return headerView;
    }


    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSLog(@"didSelectRowAtIndexPath");
        /*UIAlertView *messageAlert = [[UIAlertView alloc]
         initWithTitle:@"Row Selected" message:@"You've selected a row" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];*/

        UIAlertView *messageAlert = [[UIAlertView alloc]
                                     initWithTitle:@"Row Selected" message:[_SportGameInfo objectAtIndex:indexPath.row] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

        // Display the Hello World Message
        [messageAlert show];

    }

    - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSLog(@"willSelectRowAtIndexPath");
        return indexPath;
    }


    @end

HomePage.h:

#import <UIKit/UIKit.h>

@interface HomePage : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (strong, nonatomic) IBOutlet UITableView *PendingChal;
@property (strong, nonatomic) IBOutlet UITableView *ActiveChal;
@property (nonatomic, strong)NSArray *HomeImages;
@property (nonatomic, strong)NSArray *AwayImages;
@property (nonatomic, strong)NSArray *SportGameInfo;

@end

这里是我的 HomePage.xib

的连接

抛开你的应用程序的奇怪行为,我注意到你没有以通常的方式呈现 table 单元格。所以首先尝试以通常的方式渲染它:

  1. viewDidLoad 中注册 nib 因为你在 xib

    中创建你的单元格
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // Arrays for filling table cells
        _HomeImages=@[@"ic_bengals_nfl",@"ic_bengals_nfl",@"ic_bengals_nfl",@"ic_bengals_nfl", ];
        _AwayImages=@[@"ic_bears_nfl",@"ic_bears_nfl",@"ic_bears_nfl",@"ic_bears_nfl", ];
        _SportGameInfo=@[@"7:00pm",@"8:00pm",@"9:00pm",@"10:00pm",];
        [self.PendingChal registerNib:[GameTableCell nib] forCellReuseIdentifier:CellIdentifier];
        [self.ActiveChal registerNib:[GameTableCell nib] forCellReuseIdentifier:CellIdentifier];
    }
    
  2. - tableView:cellForRowAtIndexPath: 和 return 中的可重用单元格出队

  3. 你不需要在 tableViewCell 的初始化方法中加载 nib 删除

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"GameTableCell" owner:self options:nil]; self = [topLevelObjects objectAtIndex:0];