Can anyone tell me why tableview data are not displaying until scroll? - iphone

In my tableview i have set xml data to display but until scroll it does not display all value. I have reloaded the tableview when i am getting my xml data. I also used [cell.contenView viewWithTag:tagnumber]; But still now its not Working...please help me anybody....
Data are coming and using NSLog i can get the value but not display until scroll.
One think i have to mention that i can see the my cellview and imageview but not showing lable data.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = #"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
//cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
cell.textLabel.font = [UIFont fontWithName:#"Helvetica" size:15.0];
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"arrow.png"]];
cell.accessoryView = imageView;
tableView.separatorColor = [UIColor clearColor];
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
// THIS IS A VIEW ABOVE MY CELL NAME: cellView
cellView = [[[UIView alloc] initWithFrame:CGRectMake(0,0,290, 120)] autorelease];
cellView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:#"order_description_bg.png"]];
cellView.tag =10;
// THIS IS A IMAGEVIEW ABOVE MY cellView NAME: imgView
imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 15, 39, 36)];
imgView.image = [UIImage imageNamed:#"order_image.png"];
imgView.layer.borderColor = [UIColor blackColor].CGColor;
imgView.layer.borderWidth = 0.0f;
imgView.tag = 5;
// THIS IS A LABEL ABOVE MY cellView NAME: statusLabel
CGRect statusRect = CGRectMake(65, 0, 190, 18);
statusLabel = [[[UILabel alloc] initWithFrame:statusRect] autorelease];
statusLabel.textAlignment = UITextAlignmentLeft;
statusLabel.textColor = [UIColor blackColor];
statusLabel.font = [UIFont systemFontOfSize:12];
statusLabel.backgroundColor = [UIColor greenColor];
statusLabel.tag = 1;
[cell.contentView addSubview:cellView];
[cellView addSubview:statusLabel];
[cellView addSubview:imgView];
}
// [cell.contentView superview];
cellView = (UIView *)[cell.contentView viewWithTag:10];
imgView = (UIImageView *)[cellView viewWithTag:5];
statusLabel = (UILabel *)[cellView viewWithTag:1];
if(searching == YES && x<=inumOfRowAfterSearch){
NSLog(#"[[searchData objectAtIndex:m] intValue] is : %d",[[searchData objectAtIndex:inumOfRowAfterSearch] intValue]);
y = [[searchData objectAtIndex:inumOfRowAfterSearch] intValue];
cellView = (UIView *)[cell.contentView viewWithTag:10];
imgView = (UIImageView *)[cellView viewWithTag:5];
statusLabel = (UILabel *)[cellView viewWithTag:1];
if(pendingOrder == NO && todaysOrder == NO && x<=inumOfRowAfterSearch){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[records objectAtIndex:y] objectAtIndex:1]];
}
else if(pendingOrder == YES && todaysOrder == NO && x<=inumOfRowAfterSearch){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[records objectAtIndex:y] objectAtIndex:1]];
}
}
else{
cellView = (UIView *)[cell.contentView viewWithTag:10];
imgView = (UIImageView *)[cellView viewWithTag:5];
statusLabel = (UILabel *)[cellView viewWithTag:1];
if(pendingOrder == NO && todaysOrder == NO){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[records objectAtIndex:indexPath.section] objectAtIndex:1]];
NSLog(#"status lable value: %#",statusLabel.text);
}
else if(pendingOrder == YES && todaysOrder == NO){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[pendingRecords objectAtIndex:indexPath.section] objectAtIndex:1]];
}
}
return cell;
}
Before scroll the table.
After Scroll the tableview

Following codes are not necessary in each condition , since you have written the code outside of the condition. It seems duplicate.
cellView = (UIView *)[cell.contentView viewWithTag:10];
imgView = (UIImageView *)[cellView viewWithTag:5];
statusLabel = (UILabel *)[cellView viewWithTag:1];
And coming to your question, it seems initially it skips both if and else if conditions. Comment also the NSLogs and write NSLog in else part of the conditions.
Edit:
// [cell.contentView superview];
cellView = (UIView *)[cell.contentView viewWithTag:10];
imgView = (UIImageView *)[cellView viewWithTag:5];
statusLabel = (UILabel *)[cellView viewWithTag:1];
if(searching == YES && x<=inumOfRowAfterSearch){
NSLog(#"[[searchData objectAtIndex:m] intValue] is : %d",[[searchData objectAtIndex:inumOfRowAfterSearch] intValue]);
y = [[searchData objectAtIndex:inumOfRowAfterSearch] intValue];
if(pendingOrder == NO && todaysOrder == NO ){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[records objectAtIndex:y] objectAtIndex:1]];
}
else if(pendingOrder == YES && todaysOrder == NO ){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[records objectAtIndex:y] objectAtIndex:1]];
}
else
{
statusLabel.text = [NSString stringWithFormat:#"Status: None"];
}
}
else{
if(pendingOrder == NO && todaysOrder == NO){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[records objectAtIndex:indexPath.section] objectAtIndex:1]];
NSLog(#"status lable value: %#",statusLabel.text);
}
else if(pendingOrder == YES && todaysOrder == NO){
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[pendingRecords objectAtIndex:indexPath.section] objectAtIndex:1]];
}
else
{
statusLabel.text = [NSString stringWithFormat:#"Status: None"];
}
}
return cell;

Related

i have issue with prototype table view cell that my cell text is overlapping every time when it get used

This is my code every time when i scroll my labels text are getting overleaped.Text are overlapping and i think this is because reuse of cell.
I am using storyboard and this is not a custom cell.
Need some help,every single help would be appreciated.
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *TableViewCEll =#"TableViewCell";
UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:TableViewCEll forIndexPath:indexPath];
if (Cell == nil) {
Cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableViewCEll];
}
UIImageView *imageView=[[UIImageView alloc]init];
imageView.frame =CGRectMake(5, 5, 100,110);
[Cell.contentView addSubview:imageView];
NSArray * array =[[self.ListOfCarArray objectAtIndex:indexPath.row]objectForKey:#"CarImage"];
if (array.count >0) {
NSString * str = [NSString stringWithFormat:#"%#uploads/Car/%#",[self.GetUserConfiDict objectForKey:#"server"],[[array objectAtIndex:0]objectForKey:#"name"]];
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]init];
manager.responseSerializer = [AFImageResponseSerializer serializer];
[manager GET:str
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
imageView.image = responseObject;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(#"Failed with error %#.",[error localizedFailureReason]);
}];
}
UILabel * ModelLbl =[[UILabel alloc]initWithFrame:CGRectMake(120, 10, 120, 25)];
ModelLbl.textColor = [UIColor whiteColor];
NSDictionary *str = [[NSDictionary alloc]init];
str =[[self.ListOfCarArray objectAtIndex:indexPath.row]objectForKey:#"Car"];
ModelLbl.text = [str objectForKey:#"model"];
[Cell.contentView addSubview:ModelLbl];
int x = 120;
int y = 50;
for (int i = 1; i<=5; i++) {
UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(x, y, 84,15)];
label.textColor = [UIColor whiteColor];
if (i ==1) {
id null = [str objectForKey:#"year"];
if ([null isKindOfClass:[NSNull class]]) {
label.text =#"";
}
else{
label.text = [str objectForKey:#"year"];
[Cell.contentView addSubview:label];
}
}
else if (i == 2){
id null = [str objectForKey:#"color"];
if ([null isKindOfClass:[NSNull class]]) {
label.text =#"";
}
else{
label.text =[str objectForKey:#"color"];
[Cell.contentView addSubview:label];
}
}
else if (i == 3){
id null = [str objectForKey:#"price"];
if ([null isKindOfClass:[NSNull class]]) {
label.text =#"";
}
else{
label.text =[str objectForKey:#"price"];
[Cell.contentView addSubview:label];
x+=100;
y = 30;
}
}
else if (i ==4) {
id null = [str objectForKey:#"miles"];
if ([null isKindOfClass:[NSNull class]]) {
label.text =#"";
}
else{
label.text =[str objectForKey:#"miles"];
[Cell.contentView addSubview:label];
}
}
else if (i == 5){
id null = [str objectForKey:#"stock_number"];
if ([null isKindOfClass:[NSNull class]]) {
label.text =#"";
}
else{
label.text =[str objectForKey:#"stock_number"];
[Cell.contentView addSubview:label];
}
}
y+=20;
}
return Cell;
}
i got my answer and this is what i was searching for..
for (UILabel *lbl in cell.contentView.subviews)
{
if ([lbl isKindOfClass:[UILabel class]])
{
[lbl removeFromSuperview];
}
}
Yes, this is caused by the reuse of the table view cell. It is not only the labels but also the imageView. You are adding the imageView with this method
[Cell.contentView addSubview:imageView];
every time, while it should only be done when the cell is created, i.e. inside the
if (Cell == nil) {
Cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableViewCEll];
}
I'd advise to use a custom UITableViewCell subclass, but if you stick with the current approach, I'd do it this way:
static int IMAGE_VIEW_TAG = 1;
if (Cell == nil) {
Cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableViewCEll];
UIImageView *imageView = [[UIImageView alloc]init];
imageView.frame = CGRectMake(5, 5, 100,110);
imageView.tag = IMAGE_VIEW_TAG;
[Cell.contentView addSubview:imageView];
}
Further below, you can refer to the imageView by the tag:
((UIImageView *)[Cell.contentView viewWithTag:IMAGE_VIEW_TAG]).image = responseObject;
You'll have to do the same for the labels.

Tableview cell Repeating the Content on reload tableview and scrolling

My tableview cell content repeats on scrolling and reloading the Data.
I also know that changing the reuse identifier to nill will solve the issue but I need to use the reuse identifier due to the reason mentioned in this link IOS 7 UITextField resignFirstResponder BAD
Is there any other way that i can solve the repeating problem (along with reusing cells)
here is my code
CODE
- (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];
}
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
cell.textLabel.textColor = [UIColor myPlaceholderColor];
switch (indexPath.section) {
case 0:{
if (indexPath.row == 0) {
static NSString *ProfileTableIdentifier = #"ProfileCell";
ProfileCell *profilecell = (ProfileCell *)[tableView dequeueReusableCellWithIdentifier:ProfileTableIdentifier];
if (profilecell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:#"ProfileCell" owner:self options:nil];
profilecell = [nib objectAtIndex:0];
}
profilecell.photoText.text = #"Photo";
profilecell.photoText.hidden = YES;
profilecell.seperatorView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:#"TableMiddleBackground.png"]];
profilecell.leftImage1.image = [UIImage imageNamed:#"single tag.png"];
profilecell.leftImage2.image = [UIImage imageNamed:#"tag.png"];
profilecell.profileName.placeholder = #"Profile Name";
profilecell.profileName.tag = 1;
profilecell.profileName.autocapitalizationType = UITextAutocapitalizationTypeNone;
profilecell.userName.placeholder = #"Username";
profilecell.userName.tag = 2;
profilecell.userName.autocapitalizationType = UITextAutocapitalizationTypeNone;
profilecell.avatarImageView.layer.masksToBounds = YES;
profilecell.avatarImageView.layer.cornerRadius = 6.0f;
[profilecell.imageViewTap addTarget:self action:#selector(takePicture:)];
if ([profileName length] != 0 ) {
profilecell.profileName.text = profileName;
}
if ([userName length] != 0 ) {
profilecell.userName.text = userName;
}
if (imageSelected){
profilecell.avatarImageView.image = avatarImage;
}else if ([profileImageUrl length] != 0 ) {
profilecell.avatarImageView.imageURL = [NSURL URLWithString:profileImageUrl];
}else {
profilecell.avatarImageView.image = [UIImage imageNamed:#"adduser.png"];
}
return profilecell;
}else{
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"profile bio.png"];
customImage.contentMode = UIViewContentModeCenter;
[cell.contentView addSubview:customImage];
profileBioField = [[MyTextView alloc]initWithFrame:CGRectMake(40, 5, 250, MAX(35, profileBioRowHeight))];
profileBioField.placeholder = #"Profile Bio";
profileBioField.backgroundColor = [UIColor clearColor];
profileBioField.font = [UIFont boldSystemFontOfSize:14];
profileBioField.delegate = self;
profileBioField.scrollEnabled = NO;
//profileBioField.editable = NO;
profileBioField.dataDetectorTypes = UIDataDetectorTypeAll;
profileBioField.autocapitalizationType = UITextAutocapitalizationTypeNone;
profileBioField.keyboardType = UIKeyboardTypeASCIICapable;
[cell.contentView addSubview:profileBioField];
if ([profileBio length] != 0 ) {
profileBioField.text = profileBio;
}
return cell;
}
}
break;
case 1:{
if ([fbName length] ==0) {
cell.textLabel.text = #"Use Your account info";
cell.accessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:#"arrow.png"]];
}else{
cell.textLabel.text = [NSString stringWithFormat:#"Logged in as %#",name];
cell.accessoryView = nil;
}
cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
cell.textLabel.textColor = [UIColor myPlaceholderColor];
return cell;
}break;
case 2:{
if (indexPath.row == 0) {
static NSString *CellIdentifier = #"GenderCell";
UITableViewCell *gendercell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (gendercell == nil) {
gendercell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
gendercell.selectionStyle = UITableViewCellSelectionStyleNone;
male = [UIButton buttonWithType:UIButtonTypeCustom];
male.frame = CGRectMake(10, 2, 45, 40);
[male setBackgroundImage:[UIImage imageNamed:#"men in gray.png"] forState:UIControlStateNormal];
[male setBackgroundImage:[UIImage imageNamed:#"men in blue.png"] forState:UIControlStateSelected];
[male addTarget:self action:#selector(maleClicked:) forControlEvents:UIControlEventTouchUpInside];
[gendercell.contentView addSubview:male];
female = [UIButton buttonWithType:UIButtonTypeCustom];
female.frame = CGRectMake(65, 2, 45, 40);
[female setBackgroundImage:[UIImage imageNamed:#"women in gray.png"] forState:UIControlStateNormal];
[female setBackgroundImage:[UIImage imageNamed:#"women in blue.png"] forState:UIControlStateSelected];
[female addTarget:self action:#selector(femaleClicked:) forControlEvents:UIControlEventTouchUpInside];
[gendercell.contentView addSubview:female];
if ([gender isEqualToString: #"male"]) {
[male setSelected:YES];
}else if ([gender isEqualToString: #"female"]){
[female setSelected:YES];
}
return gendercell;
}else if(indexPath.row == 1) {
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"phone.png"];
customImage.contentMode = UIViewContentModeCenter;
[cell.contentView addSubview:customImage];
phoneNumberField = [[MyTextField alloc]initWithFrame:CGRectMake(50, 7, 250, 30)];
phoneNumberField.tag = 3;
phoneNumberField.font = [UIFont boldSystemFontOfSize:14];
phoneNumberField.delegate = self;
[cell.contentView addSubview:phoneNumberField];
phoneNumberField.placeholder = #"Phone Number";
phoneNumberField.keyboardType = UIKeyboardTypePhonePad;
phoneNumberField.textColor = [UIColor darkGrayColor];
phoneNumberField.clearButtonMode = UITextFieldViewModeWhileEditing;
if ([phoneNumber length] != 0) {
phoneNumberField.text = phoneNumber;
}
} else if(indexPath.row == 2) {
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"mail box icon.png"];
customImage.contentMode = UIViewContentModeCenter;
[cell.contentView addSubview:customImage];
emailIdField = [[MyTextField alloc]initWithFrame:CGRectMake(50, 7, 250, 30)];
emailIdField.tag = 4;
emailIdField.font = [UIFont boldSystemFontOfSize:14];
emailIdField.delegate = self;
[cell.contentView addSubview:emailIdField];
emailIdField.placeholder = #"Email Address";
emailIdField.keyboardType = UIKeyboardTypeEmailAddress;
emailIdField.autocapitalizationType = UITextAutocapitalizationTypeNone;
emailIdField.textColor = [UIColor darkGrayColor];
emailIdField.clearButtonMode = UITextFieldViewModeWhileEditing;
emailIdField.autocorrectionType = UITextAutocorrectionTypeNo;
if ([emailId length] != 0) {
emailIdField.text = emailId;
}
} else if(indexPath.row == 3) {
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"location.png"];
customImage.contentMode = UIViewContentModeCenter;
[cell.contentView addSubview:customImage];
locationField = [[MyTextField alloc]initWithFrame:CGRectMake(50, 7, 250, 30)];
locationField.tag = 5;
locationField.font = [UIFont boldSystemFontOfSize:14];
locationField.delegate = self;
[cell.contentView addSubview:locationField];
locationField.placeholder = #"Location";
locationField.textColor = [UIColor darkGrayColor];
locationField.clearButtonMode = UITextFieldViewModeWhileEditing;
if ([location length] != 0) {
locationField.text = location;
}
} else if(indexPath.row == 4) {
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"education.png"];
customImage.contentMode = UIViewContentModeCenter;
[cell.contentView addSubview:customImage];
educationField = [[MyTextField alloc]initWithFrame:CGRectMake(50, 7, 250, 30)];
educationField.tag = 6;
educationField.font = [UIFont boldSystemFontOfSize:14];
educationField.delegate = self;
[cell.contentView addSubview:educationField];
educationField.placeholder = #"Education";
educationField.textColor = [UIColor darkGrayColor];
educationField.clearButtonMode = UITextFieldViewModeWhileEditing;
if ([educationtxt length] != 0) {
educationField.text = educationtxt;
}
} else if(indexPath.row == 5) {
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"birthday.png"];
customImage.contentMode = UIViewContentModeCenter;
[cell.contentView addSubview:customImage];
birthdayField = [[MyTextField alloc]initWithFrame:CGRectMake(50, 7, 250, 30)];
birthdayField.tag = 7;
birthdayField.font = [UIFont boldSystemFontOfSize:14];
birthdayField.delegate = self;
[cell.contentView addSubview:birthdayField];
birthdayField.placeholder = #"Birthday";
birthdayField.textColor = [UIColor darkGrayColor];
birthdayField.clearButtonMode = UITextFieldViewModeWhileEditing;
if ([birthDay length] != 0) {
birthdayField.text = birthDay;
}
}
}
break;
case 3:{
if (indexPath.row == 0) {
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"keynew.png"];
customImage.contentMode = UIViewContentModeCenter;
[cell.contentView addSubview:customImage];
passwordField = [[MyTextField alloc]initWithFrame:CGRectMake(50, 7, 250, 30)];
passwordField.tag = 8;
passwordField.font = [UIFont boldSystemFontOfSize:14];
passwordField.delegate = self;
[cell.contentView addSubview:passwordField];
passwordField.placeholder = #"Create Password";
passwordField.keyboardType = UIKeyboardTypeASCIICapable;
passwordField.textColor = [UIColor darkGrayColor];
passwordField.clearButtonMode = UITextFieldViewModeWhileEditing;
passwordField.secureTextEntry = YES;
if ([password length] != 0 ) {
passwordField.text = password;
}
} else {
}
}break;
case 4:{
UIImageView *customImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44,44)];
customImage.image =[UIImage imageNamed:#"camera.png"];
customImage.contentMode = UIViewContentModeCenter;
//[cell.contentView addSubview:customImage];
cell.imageView.image = [UIImage imageNamed:#"camera.png"];
cell.textLabel.text = #"Enable Camera";
TTSwitch *squareThumbSwitch = [[TTSwitch alloc] initWithFrame:(CGRect){ CGPointZero, { 76.0f, 27.0f } }];
squareThumbSwitch.trackImage = [UIImage imageNamed:#"square-switch-track"];
squareThumbSwitch.overlayImage = [UIImage imageNamed:#"square-switch-overlay"];
squareThumbSwitch.thumbImage = [UIImage imageNamed:#"square-switch-thumb"];
squareThumbSwitch.thumbHighlightImage = [UIImage imageNamed:#"square-switch-thumb-highlight"];
squareThumbSwitch.trackMaskImage = [UIImage imageNamed:#"square-switch-mask"];
squareThumbSwitch.thumbMaskImage = nil; // Set this to nil to override the UIAppearance setting
squareThumbSwitch.thumbInsetX = -3.0f;
squareThumbSwitch.thumbOffsetY = -3.0f; // Set this to -3 to compensate for shadow
[squareThumbSwitch setOn:[UserDefaults privacyStatus]];
[squareThumbSwitch addTarget:self action:#selector(cameraChanged:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView = squareThumbSwitch;
return cell;
}break;
default:
break;
}
return cell;
}
Profile Cell is a UITableViewCell. You cant assign it with a view. Instead of using
ProfileCell *profilecell = (ProfileCell *)[tableView dequeueReusableCellWithIdentifier:ProfileTableIdentifier];
if (profilecell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:#"ProfileCell" owner:self options:nil];
profilecell = [nib objectAtIndex:0];
}
Use only one line
[[NSBundle mainBundle] loadNibNamed:#"ProfileCell" owner:self options:nil];

tableview refreshing while searching on iphone

I have a table view that shows 3 data side by side in table ,lets say A(name) , B(roll no) , C(id).
Now if user do search based on A's (search by name) (table get refreshed with name while searching only) value I want to either hide the content of B & C or they should show the correct value while search is on , not the old value which they got before searching.
I couldn't find the solution how to deal with remaining B & C.kindly suggest
here is my code
- (void) searchTableView
{
NSLog(#"search button is down %#",searchBar.text);
NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
if(SearchQuery==1)
{
[searchArray addObjectsFromArray:[entityArray valueForKey:#"Name"]];
}
if(SearchQuery==2)
{
[searchArray addObjectsFromArray:[entityArray valueForKey:#"IC"]];
}
for (NSString *sTemp in searchArray)
{
NSLog(#"copyListOfItems in search -%#",copyListOfItems);//final array for names
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[copyListOfItems addObject:sTemp];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSManagedObject *object = (NSManagedObject *)[entityArray objectAtIndex:indexPath.row];
NSString *CellIdentifier = #"Cell";
int indicator = UITableViewCellAccessoryNone;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 50.0)] autorelease];//220
mainLabel.tag = MAINLABEL_TAG;
[mainLabel setFont:[UIFont fontWithName:#"Helvetica-Bold" size:18]];//Palatino-BoldItalic
mainLabel.textAlignment = UITextAlignmentLeft;
mainLabel.textColor = [UIColor blackColor];
secondLabel = [[[UILabel alloc] initWithFrame:CGRectMake(313.0, 9.0, 200.0, 25.0)] autorelease];//83
secondLabel.tag = SECONDLABEL_TAG;
smallSystemFontSize]]];
[secondLabel setFont:[UIFont fontWithName:#"Helvetica" size:18]];
secondLabel.textAlignment = UITextAlignmentLeft;
secondLabel.textColor = [UIColor blackColor];
[cell.contentView addSubview:secondLabel];
//// 3rd labl display
thirdLabel = [[[UILabel alloc] initWithFrame:CGRectMake(560.0, 9.0, 250.0, 25.0)] autorelease];//83
thirdLabel.tag = THIRDLABEL_TAG;
//thirdLabel.font = [UIFont systemFontOfSize:13.0];
[thirdLabel setFont:[UIFont fontWithName:#"Helvetica" size:18]];//Palatino-BoldItalic
thirdLabel.textAlignment = UITextAlignmentLeft;
thirdLabel.textColor = [UIColor blackColor];
[cell.contentView addSubview:thirdLabel];
}
if(searching)
{
NSLog(#" seacrh List in table view =%#",[copyListOfItems objectAtIndex:indexPath.row]);
// NSString *s=[object valueForKey:#"Name"];
NSLog(#"copyListOfItems length ---------%d",[copyListOfItems count]);
cell.textLabel.text =[copyListOfItems objectAtIndex:indexPath.row] ;
if(SearchQuery==2)
{
secondLabel.text=#"kk";// not working
secondLabel.alpha=1; // this is not working i cant upadate
}
}
else
{
if(self.entityName == #"Parent")
{
{
indicator = UITableViewCellAccessoryDisclosureIndicator;
CellIdentifier = #"CellWithDisclosure";
}
}
if(SearchQuery==2)
{
cell.textLabel.text =[object valueForKey:#"IC"] ;
secondLabel = (UILabel *)[cell.contentView viewWithTag:SECONDLABEL_TAG];
thirdLabel = (UILabel *)[cell.contentView viewWithTag:THIRDLABEL_TAG];
NSLog(#"sex is %# ",[object valueForKey:#"Name"]);
secondLabel.text=[object valueForKey:#"Name"] ;
secondLabel.alpha=0;
thirdLabel.text=[object valueForKey:#"roll"] ;
}

How can I search data from tableview cell?

I have an UITableview controller which representing fetched XML data. For representing these data I used five UILabel. Now I have to add a searchbar at the top of the UITableview. So programmatically I have added a searchbar.
Now I have used searching theorem for search data from the UITableview. But It is not working. I can search data from UItableview when only one text in the UItableviewcell without any UIlabel or something else but in my UItableviewcell cell are taking five UILabel that's why it's becoming tough for me to search data from the UItableviewcell. For understanding I am attaching my code how I am representing my XML data in tableview cell.
This is my XML data representation in UITableviewCell...
static NSString *MyIdentifier = #"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
cell.textLabel.font = [UIFont fontWithName:#"Helvetica" size:15.0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"arrow.png"]];
cell.accessoryView = imageView;
cell.accessoryType = UITableViewCellSelectionStyleNone;
tableView.separatorColor = [UIColor clearColor];
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
cellView = [[[UIView alloc] initWithFrame:CGRectMake(5,8,290, 120)] autorelease];
cellView.backgroundColor = [UIColor clearColor];
cellView.tag =10;
[cell.contentView addSubview:cellView];
imgView = [[UIImageView alloc] initWithFrame:CGRectMake(2, 40, 48, 48)];
imgView.image = [UIImage imageNamed:#"productbox.png"];
imgView.layer.borderColor = [UIColor blackColor].CGColor;
imgView.layer.borderWidth = 2.0;
imgView.tag = 5;
[cellView addSubview:imgView];
CGRect idLabelRect = CGRectMake(65, 0, 190, 18);
idLabel = [[[UILabel alloc] initWithFrame:idLabelRect] autorelease];
idLabel.textAlignment = UITextAlignmentLeft;
idLabel.textColor = [UIColor blackColor];
idLabel.font = [UIFont systemFontOfSize:12];
idLabel.backgroundColor = [UIColor clearColor];
idLabel.layer.borderColor = [UIColor grayColor].CGColor;
idLabel.tag = 0;
CGRect statusRect = CGRectMake(65, 22, 190, 22);
statusLabel = [[[UILabel alloc] initWithFrame:statusRect] autorelease];
statusLabel.textAlignment = UITextAlignmentLeft;
statusLabel.textColor = [UIColor blackColor];
statusLabel.font = [UIFont systemFontOfSize:12];
statusLabel.backgroundColor = [UIColor clearColor];
statusLabel.layer.borderColor = [UIColor grayColor].CGColor;
statusLabel.tag = 1;
CGRect orderDateRect = CGRectMake(65, 48, 190, 22);
orderDate = [[[UILabel alloc] initWithFrame:orderDateRect] autorelease];
orderDate.textAlignment = UITextAlignmentLeft;
orderDate.textColor = [UIColor blackColor];
orderDate.font = [UIFont systemFontOfSize:12];
orderDate.backgroundColor = [UIColor clearColor];
orderDate.layer.borderColor = [UIColor grayColor].CGColor;
orderDate.tag = 2;
CGRect byRect = CGRectMake(65, 75, 190, 22);
byLabel = [[[UILabel alloc] initWithFrame:byRect] autorelease];
byLabel.textAlignment = UITextAlignmentLeft;
byLabel.textColor = [UIColor blackColor];
byLabel.font = [UIFont systemFontOfSize:12];
byLabel.backgroundColor = [UIColor clearColor];
byLabel.layer.borderColor = [UIColor grayColor].CGColor;
byLabel.tag = 3;
CGRect totalRect = CGRectMake(65, 98, 190, 22);
totalLabel = [[[UILabel alloc] initWithFrame:totalRect] autorelease];
totalLabel.textAlignment = UITextAlignmentLeft;
totalLabel.textColor = [UIColor blackColor];
totalLabel.font = [UIFont systemFontOfSize:12];
totalLabel.backgroundColor = [UIColor clearColor];
totalLabel.layer.borderColor = [UIColor grayColor].CGColor;
totalLabel.tag = 4;
[cellView addSubview:idLabel];
[cellView addSubview:statusLabel];
[cellView addSubview:orderDate];
[cellView addSubview:byLabel];
[cellView addSubview:totalLabel];
}
if(searching == YES){
//[cell setText:[tableData objectAtIndex:indexPath.row]];
cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
}
else{
cellView = (UIView *)[cell.contentView viewWithTag:10];
idLabel = (UILabel *)[cellView viewWithTag:0];
statusLabel = (UILabel *)[cellView viewWithTag:1];
orderDate = (UILabel *)[cellView viewWithTag:2];
byLabel = (UILabel *)[cellView viewWithTag:3];
totalLabel = (UILabel *)[cellView viewWithTag:4];
imgView = (UIImageView *)[cellView viewWithTag:5];
if(pendingOrder == NO && todaysOrder == NO){
idLabel.text = [NSString stringWithFormat:#"Order Id: %#",[[records objectAtIndex:indexPath.section] objectAtIndex:0]];
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[records objectAtIndex:indexPath.section] objectAtIndex:1]];
orderDate.text = [NSString stringWithFormat:#"Date: %#",[[records objectAtIndex:indexPath.section] objectAtIndex:2]];
byLabel.text =[NSString stringWithFormat:#"By: %#",[[records objectAtIndex:indexPath.section] objectAtIndex:3]];
totalLabel.text =[NSString stringWithFormat:#"Total: %#",[[records objectAtIndex:indexPath.section] objectAtIndex:4]];
}
else if(pendingOrder == YES && todaysOrder == NO){
idLabel.text = [NSString stringWithFormat:#"Order Id: %#",[[pendingRecords objectAtIndex:indexPath.section] objectAtIndex:0]];
statusLabel.text = [NSString stringWithFormat:#"Status: %#",[[pendingRecords objectAtIndex:indexPath.section] objectAtIndex:1]];
orderDate.text = [NSString stringWithFormat:#"Date: %#",[[pendingRecords objectAtIndex:indexPath.section] objectAtIndex:2]];
byLabel.text =[NSString stringWithFormat:#"By: %#",[[pendingRecords objectAtIndex:indexPath.section] objectAtIndex:3]];
totalLabel.text =[NSString stringWithFormat:#"Total: %#",[[pendingRecords objectAtIndex:indexPath.section] objectAtIndex:4]];
}
}
return cell;
}
And this searching Delegate.....
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
searching = YES;
// only show the status bar’s cancel button while in edit mode
sBar.showsCancelButton = YES;
sBar.autocorrectionType = UITextAutocorrectionTypeNo;
// flush the previous search content
[tableData removeAllObjects];
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{
searching = NO;
sBar.showsCancelButton = NO;
}
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[tableData removeAllObjects];// remove all data that belongs to previous search
if([searchText isEqualToString:#""] && searchText==nil){
[tableview reloadData];
return;
}
NSInteger counter = 0;
for(NSString *name in dataSource)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSRange r = [name rangeOfString:searchText];
if(r.location != NSNotFound)
{
if(r.location== 0)//that is we are checking only the start of the names.
{
[tableData addObject:name];
}
}
counter++;
[pool release];
}
[tableview reloadData];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
// if a valid search was entered but the user wanted to cancel, bring back the main list content
[tableData removeAllObjects];
searching = NO;
[tableData addObjectsFromArray:dataSource];
#try{
searching = NO;
[tableview reloadData];
}
#catch(NSException *e){
}
[sBar resignFirstResponder];
sBar.text = #"";
}
// called when Search (in our case “Done”) button pressed
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[sBar resignFirstResponder];
}
For more help to understand i am also attaching my viewDidLoad....
//Add the search bar
sBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0,0,320,50)];
sBar.delegate = self;
searching = NO;
[self.view addSubview:sBar];
tableview.dataSource = self;
tableview.delegate = self;
//initialize the two arrays; datasource will be initialized and populated by appDelegate
searchData = [[NSMutableArray alloc] init];
tableData = [[NSMutableArray alloc] init];
[tableData addObjectsFromArray:dataSource];//on launch it should display all the records
Edit
This is my edited portion of numberOfSectionsInTableView and numberOfRowsInSection...
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if(searching == YES){
searching = NO;
sectionCount = [tableData count];
}
else {
if(pendingOrder == NO && todaysOrder == NO){
sectionCount = [records count];
NSLog(#"section cout: %d",sectionCount);
}
else if(pendingOrder == YES && todaysOrder == NO){
//Total pending order counting
sectionCount = [pendingRecords count];
NSLog(#"section cout for pending: %d",sectionCount);
}
else if(pendingOrder == NO && todaysOrder == YES){
NSLog(#"todays order number counting");
}
}
return sectionCount;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
Try this:-
copylistofItem is NSMutableArray copying data that matched with search bar criteria.
- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar {
NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
int i=0
for (NSString *str in [records objectAtIndex:indexPath.i] objectAtIndex:0])
{
[searchArray addObject:str];
i++;
}
for (NSString *sTemp in searchArray)
{
NSString *txtToSearch =[[NSString alloc] initWithString:[sTemp substringWithRange:NSMakeRange(0,[searchText length])]];
if([[txtToSearch lowercaseString] isEqualToString:[searchText lowercaseString]])
{
[copyListOfItems addObject:sTemp];
}
}
[searchArray release];
searchArray = nil;
}
Also we want to know what you have written in your numberOfSections tableView Delegate.

Objective-C: First item of NSArray sometimes is missing

I have and NSArray with 5 string elements, populating an UITableView of my iPhone App.
Everything works fine, but sometimes the first string of my array is missing and I can't figure out why.
Here is my code:
arrayList = [[NSArray alloc] initWithObjects: #"My First String",
#"My Second String",
#"My Third String",
#"My Forth String",
#"My Fifth Sring",
nil];
The element that sometimes just doesn't show up is My First String
Actually I'm using this sample code from Cocoa With Love. Thanks guys for helping me!
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
#if USE_CUSTOM_DRAWING
const NSInteger TOP_LABEL_TAG = 1001;
// const NSInteger BOTTOM_LABEL_TAG = 1002;
UILabel *topLabel;
// UILabel *bottomLabel;
#endif
static NSString *CellIdentifier = #"Cell";
UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
//
// Create the cell.
//
cell =
[[[UITableViewCell alloc]
initWithFrame:CGRectZero
reuseIdentifier:CellIdentifier]
autorelease];
#if USE_CUSTOM_DRAWING
UIImage *indicatorImage = [UIImage imageNamed:#"image1.png"];
cell.accessoryView =
[[[UIImageView alloc]
initWithImage:indicatorImage]
autorelease];
const CGFloat LABEL_HEIGHT = 22;
UIImage *image = [UIImage imageNamed:#"image2.png"];
//
// Create the label for the top row of text
//
topLabel =
[[[UILabel alloc]
initWithFrame:
CGRectMake(
image.size.width + 2.0 * cell.indentationWidth,
0.5 * (aTableView.rowHeight - 1.3 * LABEL_HEIGHT),
aTableView.bounds.size.width -
image.size.width - 4.0 * cell.indentationWidth
- indicatorImage.size.width,
LABEL_HEIGHT)]
autorelease];
[cell.contentView addSubview:topLabel];
//
// Configure the properties for the text that are the same on every row
//
topLabel.tag = TOP_LABEL_TAG;
topLabel.backgroundColor = [UIColor clearColor];
topLabel.textColor = [UIColor colorWithRed:0.25 green:0.0 blue:0.0 alpha:1.0];
topLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];
topLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]];
topLabel.textAlignment = UITextAlignmentCenter;
/*
//
// Create the label for the bottom row of text
//
bottomLabel =
[[[UILabel alloc]
initWithFrame:
CGRectMake(
image.size.width + 2.0 * cell.indentationWidth,
0.5 * (aTableView.rowHeight - 2 * LABEL_HEIGHT) + LABEL_HEIGHT,
aTableView.bounds.size.width -
image.size.width - 4.0 * cell.indentationWidth
- indicatorImage.size.width,
LABEL_HEIGHT)]
autorelease];
[cell.contentView addSubview:bottomLabel];
//
// Configure the properties for the text that are the same on every row
//
bottomLabel.tag = BOTTOM_LABEL_TAG;
bottomLabel.backgroundColor = [UIColor clearColor];
bottomLabel.textColor = [UIColor colorWithRed:0.25 green:0.0 blue:0.0 alpha:1.0];
bottomLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];
bottomLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize] - 2];
*/
//
// Create a background image view.
//
cell.backgroundView =
[[[UIImageView alloc] init] autorelease];
cell.selectedBackgroundView =
[[[UIImageView alloc] init] autorelease];
#endif
}
#if USE_CUSTOM_DRAWING
else
{
topLabel = (UILabel *)[cell viewWithTag:TOP_LABEL_TAG];
// bottomLabel = (UILabel *)[cell viewWithTag:BOTTOM_LABEL_TAG];
}
topLabel.text = [arrayList objectAtIndex:indexPath.row];
//bottomLabel.text = [NSString stringWithFormat:#"Some other information.", [indexPath row]];
// [cell LabelText:[arrayList objectAtIndex:indexPath.row]];
//
// Set the background and selected background images for the text.
// Since we will round the corners at the top and bottom of sections, we
// need to conditionally choose the images based on the row index and the
// number of rows in the section.
//
UIImage *rowBackground;
UIImage *selectionBackground;
NSInteger sectionRows = [aTableView numberOfRowsInSection:[indexPath section]];
NSInteger row = [indexPath row];
if (row == 0 && row == sectionRows - 1)
{
rowBackground = [UIImage imageNamed:#"topAndBottomRow.png"];
selectionBackground = [UIImage imageNamed:#"topAndBottomRowSelected_copy.png"];
}
else if (row == 0)
{
rowBackground = [UIImage imageNamed:#"topRow.png"];
selectionBackground = [UIImage imageNamed:#"topRowSelected_copy.png"];
}
else if (row == sectionRows - 1)
{
rowBackground = [UIImage imageNamed:#"bottomRow.png"];
selectionBackground = [UIImage imageNamed:#"bottomRowSelected_copy.png"];
}
else
{
rowBackground = [UIImage imageNamed:#"middleRow.png"];
selectionBackground = [UIImage imageNamed:#"middleRowSelected_copy.png"];
}
((UIImageView *)cell.backgroundView).image = rowBackground;
((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;
if (row == 0)
{
cell.imageView.image = [UIImage imageNamed:#"pic1.png"];
}
else if (row == 1)
{
cell.imageView.image = [UIImage imageNamed:#"pic2.png"];
}
else if (row == 2)
{
cell.imageView.image = [UIImage imageNamed:#"pic3.png"];
}
else if (row == 3)
{
cell.imageView.image = [UIImage imageNamed:#"pic4.png"];
}
else if (row == 4)
{
cell.imageView.image= [UIImage imageNamed:#"pic5.png"];
}
#else
[cell LabelText:[arrayList objectAtIndex:indexPath.row]];
//cell.text = [NSString stringWithFormat:#"Cell at row %ld.", [indexPath row]];
#endif
return cell;
}
The issue you are probably having is accessing object 1 as index 1... Arrays in Objective-C are the same as most other C structured languages. Indexed starting at 0.
Put this code in.
for (int i = 0; i < [arrayList count]; i++)
{
NSLog(#"Item %d = %#", i, [arrayList objectAtIndex:i]);
}
Chances are good that this works fine.
If that is not the case the I would recommend restoring your iphone to factory default as either the operating system is malfunctioning, or you have other rogue processes that are corrupting memory.
To debug the code above. As you are grabbing the items out of the array I would put in an NSLog()
NSString *objectAtIndex = [arrayList objectAtIndex:indexPath.row];
NSLog(#"Row: %d, Object: %#, Count: %d",indexPath.row, objectAtIndex, [arrayList count]);
[cell LabelText:[arrayList objectAtIndex:indexPath.row]];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *CellIdentifier = #"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [arrayList objectAtIndex:indexPath.row];
return cell;
}
Are you doing something similar to this for populating table view
NSMutableArray *ArrayList=[[NSMutableArray alloc]initWithObjects: #"My First String",
#"My Second String",
#"My Third String",
#"My Forth String",
#"My Fifth Sring",
nil];