繁体   English   中英

iOS 7自定义单元格未在表格视图中显示

[英]iOS 7 custom cell not displaying in table view

请耐心等待,我刚刚开始iOS开发。 我想显示自定义tableViewCell故事板内tableView 我做了以下事情。

我创建了一个带有tableViewCell的新.xib

在此输入图像描述

然后我为此创建了一个自定义类。 .h文件看起来像这样

#import <UIKit/UIKit.h>

@interface CustomTableCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIImageView *thumbnailImageView;
@property (weak, nonatomic) IBOutlet UILabel› *titleLabel;

@end

然后在我的TableViewController.m我导入了CustomTableCell.h ,我正在关注10行

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

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

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

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

    cell.titleLabel.text ="test text";


    return cell;
}

这似乎很好,但是当项目加载时没有任何反应。 任何建议都会很棒。

我在cellForRowAtIndexPath方法中放置了一个断点,但它永远不会到达这一点。 这是模拟器的屏幕截图

在此输入图像描述

您必须注册.xib文件。 viewDidLoad方法中,添加以下内容:

[self.tableView registerNib:[UINib nibWithNibName:@"CustomTableCell" bundle:nil] 
     forCellReuseIdentifier:@"CustomTableCell"];

你加载笔尖的方式真的过时了,过时了。 注册nib并使用dequeueReusableCellWithIdentifier:forIndexPath:会好得多(自iOS 6起)。

请参阅我对获取自定义单元格的所有四种方法的解释

确保在UITableView的故事板中设置了委托和数据源。 这将确保为每一行调用cellForRowAtIndexPath 您可以在该方法中放置NSLog消息来验证相同的内容。

此外,由于您使用的是故事板,因此您可能需要查看UITableView的Prototype Cells。 它们是一种更容易做同样事情的方法 - 使用自定义单元格创建UITableView。

这是在故事板的UITableView中使用Prototype单元的一个不错的教程:

http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1

- (void) viewDidLoad {

    [super viewDidLoad];

    UINib *cellNib = [UINib nibWithNibName:@"CustomTableCell" bundle:[NSBundle mainBundle]];
    [self.tableView registerNib:cellNib forCellReuseIdentifier:@"CustomTableCell"];

}

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

    if(cell == nil)
    {
        cell = [[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.titleLabel.text ="test text";


    return cell;
}

一个非常基本的问题,但您是否实现了tableview委托方法,该方法指示应显示多少个单元格? 委托方法如下:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //Return number of cells to display here
    return 1;
}

一定要在xib中只有一个项目(Uitableviewcell实例)

#import <UIKit/UIKit.h>
#import "DetailViewController.h"
#import "NewViewController.h"
#import "CustomCellVC.h"

@interface FirstVC : UIViewController
{
    DetailViewController *detailViewController;
    NewViewController *objNewViewController;
    CustomCellVC *objCustom;
    NSMutableData *webData;
    NSArray *resultArray;
    //IBOutlet UIButton *objButton;
}
@property(strong,nonatomic)IBOutlet DetailViewController *detailViewController;
@property(strong,nonatomic)IBOutlet UITableView *objTable;
-(void)loginWS;
-(IBAction)NewFeatureButtonClk:(id)sender;
@end

#import "FirstVC.h"

@interface FirstVC ()

@end

@implementation FirstVC
@synthesize objTable;
@synthesize detailViewController;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    objTable.frame = CGRectMake(0, 20, 320, 548);
    [self loginWS];
}
-(void)loginWS
{
    //Para username password
    NSURL *url = [NSURL URLWithString:@"http://192.168.0.100/FeatureRequestComponent/FeatureRequestComponentAPI"];
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
    [req setHTTPMethod:@"POST"];
    [req addValue:@"application/json"  forHTTPHeaderField:@"Content-Type"];
   // [req addValue:[NSString stringWithFormat:@"%i",postBody.length] forHTTPHeaderField:@"Content-Length"];
    [req setTimeoutInterval:60.0 ];
    //[req setHTTPBody:postBody];
    //[cell setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"CellBg.png"]]];

    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:req delegate:self];

    if (connection)
    {
        webData = [[NSMutableData alloc]init];
    }

}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:webData options:0 error:nil];
    resultArray = [[NSArray alloc]initWithArray:[responseDict valueForKey:@"city"]];
    NSLog(@"resultArray: %@",resultArray);
    [self.objTable reloadData];
}
-(IBAction)NewFeatureButtonClk:(id)sender
{
    objNewViewController=[[NewViewController alloc]initWithNibName:@"NewViewController" bundle:nil];
    // Push the view controller.
    [self.navigationController pushViewController:objNewViewController animated:YES];
}

#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
{
//#warning Incomplete method implementation.
    // Return the number of rows in the section.
    return [resultArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
   objCustom = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (objCustom == nil) {
       objCustom = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }


   //objCustom.persnName.text=[[resultArray objectAtIndex:indexPath.row]valueForKey:@"Name"];
    //objCustom.persnAge.text=[[resultArray objectAtIndex:indexPath.row]valueForKey:@"Age"];


   // Configure the cell...
    objCustom.textLabel.text = [[resultArray objectAtIndex:indexPath.row] valueForKey:@"FeatureTitle"];
    objCustom.detailTextLabel.text = [[resultArray objectAtIndex:indexPath.row] valueForKey:@"Description"];


    return objCustom;
}

#pragma mark - Table view delegate

// In a xib-based application, navigation from a table can be handled in -tableView:didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here, for example:
    // Create the next view controller.
    detailViewController = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];
    detailViewController.objData=[resultArray objectAtIndex:indexPath.row];
    // Pass the selected object to the new view controller.

    // Push the view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];
}

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

@end
#import <UIKit/UIKit.h>
#import "DetailData.h"

@interface DetailViewController : UIViewController
{
    DetailData *objData;
}
@property(strong,nonatomic)IBOutlet UITextField *usecaseTF;
@property(strong,nonatomic)IBOutlet UITextView *featureTF;
@property(strong,nonatomic)IBOutlet UILabel *priority;
@property(strong,nonatomic)IBOutlet UIButton *voteBtn;
@property(strong,nonatomic)IBOutlet DetailData *objData;
-(IBAction)voteBtnClk:(id)sender;
@end
#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController
@synthesize objData,usecaseTF,featureTF,priority,voteBtn;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

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

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

    usecaseTF.text=objData.usecaseTF;
    featureTF.text=objData.featureTF;
    priority.text=objData.priority;


}

-(IBAction)voteBtnClk:(id)sender
{
    if ([voteBtn.currentImage isEqual:@"BtnGreen.png"])
    {
        [voteBtn setImage:[UIImage imageNamed:@"BtnBlack.png"] forState:UIControlStateNormal];
    }
    else
    {
        [voteBtn setImage:[UIImage imageNamed:@"BtnGreen.png"] forState:UIControlStateNormal];

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

@end

#import <UIKit/UIKit.h>

@interface NewViewController : UIViewController<UITextFieldDelegate>
{
    UITextField *currentTF;
}
@property(strong,nonatomic) IBOutlet UITextField *nameTF;
@property(strong,nonatomic)IBOutlet UITextField *emailTF;
@property(strong,nonatomic)IBOutlet UITextField *featureTF;
@property(strong,nonatomic)IBOutlet UITextField *descpTF;
@property(strong,nonatomic)IBOutlet UITextView *UsecaseTV;
@property(strong,nonatomic)IBOutlet UIButton *HighBtn;
@property(strong,nonatomic)IBOutlet UIButton *LowBtn;
@property(strong,nonatomic)IBOutlet UIButton *MediumBtn;

-(IBAction)sendRequestBtnClk:(id)sender;
-(IBAction)RadioBtnHigh:(id)sender;
-(IBAction)RadioBtnLow:(id)sender;
-(IBAction)RadioBtnMedium:(id)sender;
-(void)radioBtnClick;
@end
#import "NewViewController.h"

@interface NewViewController ()

@end

@implementation NewViewController

@synthesize nameTF,emailTF,featureTF,descpTF,UsecaseTV,LowBtn,HighBtn,MediumBtn;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.title=@"Did I Know This";
    currentTF=[[UITextField alloc]init];
    [ self radioBtnClick];
}

-(IBAction)sendRequestBtnClk:(id)sender
{

    if (nameTF.text.length==0)
    {
        [self showAlertMessage:@"Please enter Your Name"];
        //  return NO;
    }
    else if (emailTF.text.length==0)
    {
        [self showAlertMessage:@"Please enter email ID"];

    }
    if (emailTF.text.length==0)
    {
        [self showAlertMessage:@"Please enter email address"];

    }
    else if ([self emailValidation:emailTF.text]==NO)
    {
        [self showAlertMessage:@"Please enter valid email address"];

    }
    else if(featureTF.text.length==0)
    {
    [self showAlertMessage:@"Please Confirm the Feature title"];
    }

}
-(BOOL) emailValidation:(NSString *)emailTxt
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
    return [emailTest evaluateWithObject:emailTxt];

}

-(void)showAlertMessage:(NSString *)msg
{
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Note" message:msg delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [alert show];
}

 #pragma mark TextField Delegates
 - (BOOL)textFieldShouldReturn:(UITextField *)textField
 {
  [currentTF resignFirstResponder];

 return YES;
 }
 -(void)textFieldDidBeginEditing:(UITextField *)textField
 {
 currentTF = textField;
 [self animateTextField:textField up:YES];
 }

 - (void)textFieldDidEndEditing:(UITextField *)textField
 {
 currentTF = textField;

 [self animateTextField:textField up:NO];
 }

 -(void)animateTextField:(UITextField*)textField up:(BOOL)up
 {
 int movementDistance = 0; // tweak as needed

 if (textField.tag==103||textField.tag==104||textField.tag==105||textField.tag==106)
 {
 movementDistance = -130;
 }

 else if (textField.tag==107||textField.tag==108)
 {
 movementDistance = -230;
 }
 else
 {
 movementDistance = 00;

 }
 const float movementDuration = 0.3f; // tweak as needed

 int movement = (up ? movementDistance : -movementDistance);

 [UIView beginAnimations: @"animateTextField" context: nil];
 [UIView setAnimationBeginsFromCurrentState: YES];
 [UIView setAnimationDuration: movementDuration];
 self.view.frame = CGRectOffset(self.view.frame, 0, movement);
 [UIView commitAnimations];
 }

 -(void)radioBtnClick
 {
     if ([HighBtn.currentImage isEqual:@"radiobutton-checked.png"])
     {


      [LowBtn setImage:[UIImage imageNamed:@"radiobutton-checked.png"] forState:UIControlStateNormal];
    [MediumBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
      [HighBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
     }
     else
     {
         [LowBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
         [HighBtn setImage:[UIImage imageNamed:@"radiobutton-checked.png"] forState:UIControlStateNormal];
        [MediumBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
     }
 }

-(IBAction)RadioBtnHigh:(id)sender
 {


        [LowBtn setImage:[UIImage imageNamed:@"radiobutton-checked.png"] forState:UIControlStateNormal];
        [HighBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
     [MediumBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
 }


-(IBAction)RadioBtnLow:(id)sender
 {


    [LowBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
    [HighBtn setImage:[UIImage imageNamed:@"radiobutton-checked.png"] forState:UIControlStateNormal];
     [MediumBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];

 }
-(IBAction)RadioBtnMedium:(id)sender
{
    [LowBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
    [HighBtn setImage:[UIImage imageNamed:@"radiobutton-unchecked.png"] forState:UIControlStateNormal];
    [MediumBtn setImage:[UIImage imageNamed:@"radiobutton-checked.png"] forState:UIControlStateNormal];
}





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

@end
#import <UIKit/UIKit.h>

@interface CustomCellVC : UITableViewCell
@property (strong,nonatomic) IBOutlet UIImageView *persnImage;
@property (strong,nonatomic) IBOutlet UIButton *thumbImage;
@property (strong,nonatomic) IBOutlet UIImageView *calenderImage;
@property (strong,nonatomic) IBOutlet UIButton *voteImage;
@property (strong,nonatomic) IBOutlet UIButton *selectImage;
@property (strong,nonatomic) IBOutlet UILabel *publabel;
@property (strong,nonatomic) IBOutlet UILabel *IdLabel;
@property (strong,nonatomic) IBOutlet UILabel *decpLabel;
@property (strong,nonatomic) IBOutlet UITextField *ansTF;


@end
#import "CustomCellVC.h"

@implementation CustomCellVC
@synthesize ansTF,persnImage,publabel,thumbImage,calenderImage,voteImage,selectImage,IdLabel,decpLabel;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

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

    // Configure the view for the selected state
}

@end
@synthesize ObjFirstVC,objNavc;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    ObjFirstVC=[[FirstVC alloc ]initWithNibName:@"FirstVC" bundle:nil];
    objNavc=[[UINavigationController alloc]initWithRootViewController:ObjFirstVC];
    [self.window addSubview:objNavc.view];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

#import <Foundation/Foundation.h>

@interface DetailData : NSObject
@property(strong,nonatomic)IBOutlet UITextField *usecaseTF;
@property(strong,nonatomic)IBOutlet UITextView *featureTF;
@property(strong,nonatomic)IBOutlet UILabel *priority;
@property(strong,nonatomic)IBOutlet UIButton *voteBtn;
@end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM