2014-01-10 193 views
4

請耐心等待,我剛開始iOS開發。我正試圖在故事板tableView內顯示自定義tableViewCell。我做了以下。iOS 7自定義單元格不顯示在表格視圖

我在它

enter image description here

創造了一個新的.xibtableViewCell我已經然後創建一個自定義的類此。 .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方法中放置了一個斷點,但它從未達到過這一點。這裏是模擬器

enter image description here

+0

?表格視圖甚至出現了嗎? –

+0

只需要清楚,你可以請張貼其餘的UITableView數據源/委託方法? –

+0

「沒有任何反應」是毫無意義的。 _有事情發生。什麼? – matt

回答

9

正在加載的筆尖的方式實在是老套和過時的。從iOS 6開始註冊筆尖並使用dequeueReusableCellWithIdentifier:forIndexPath:要好得多。

請參閱my explanation獲取自定義單元格的四種方法。

+0

我不知道我做錯了什麼,請你快速瀏覽一下https://github.com/beard3dgeek/customeCellDemo? – c11ada

+0

是的,我可以。 :)掛在那裏。 – matt

+0

_MyCustomCell.xib_中的'imageView'和'titleLabel'插座未連接到圖像視圖和標籤對象;他們(錯誤地)連接到單元格的內容視圖。 – matt

7

確保委託和數據源在故事板的UITableView的設置的屏幕截圖。這將確保cellForRowAtIndexPath正在爲每行調用。您可以在該方法中添加NSLog消息來驗證相同的事情。

此外,由於您正在使用故事板,因此您可能需要查看UITableView的原型單元。他們是一個更容易做同樣的事情 - 用自定義單元格創建一個UITableView。

下面是使用你的故事板的UITableView的內原型細胞像樣的教程:

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

+0

這原來是(的一部分)正確的答案;他沒有在故事板上連接代表和數據源。 – matt

1

一個非常基本的問題,但你有沒有實現,表示多少個單體電池應顯示的tableview委託方法?委託方法如下:

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

請看更新,我已添加此代碼。 – c11ada

12

,必須註冊的.xib文件。在你viewDidLoad方法,添加以下內容:

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

我已經將此添加到我的表視圖控制器viewDidLoad中,並且我還在我的cellForRowAtIndexPath中放置了斷點,但它從未達到這一點! – c11ada

+1

這應該是'nibWithNibName'。 – sooper

+0

謝謝@sooper,編輯。 – Steve

5
- (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; 
} 
+0

'UINib * cellNib = ...'在我的代碼中缺少viewDidLoad。 – byJeevan

0

確保你在模擬器看到有隻有一個項目在廈門國際銀行的(例如的UITableViewCell)

-1
#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. 
    [email protected]"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._%+-][email protected][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 
+2

請添加說明。僅僅粘貼代碼是不夠的 – DhruvJoshi

相關問題