我有一个从未正常工作的UITableView。这个表视图有两个部分。
我已经创建了2个uibutton,它们几乎都是相同的图像,但一个是灰色的,一个是红色的。
当UITableView第一次加载时,UITableView中的每一行都应该有灰色按钮,然后如果用户点击该行的按钮,那么它会切换到红色版本的按钮。
由于某些原因,当我在iPhone上用这个UITableView加载视图控制器时,第一部分中的行永远不会有按钮。奇怪的是,如果我点击我的手指应该是按钮发生了两件事:
-
附加到按钮的功能在xcode的控制台中工作和nlog。
-
红色按钮出现
就像灰色按钮一样,它是不可见的。这不起作用,因为如果用户看到没有按钮的行,他们会认为有些东西坏了,或者他们不能点击那一行。
同样,如果我滚动到UITableView的最底部,然后再向上滚动,不可见的灰色按钮会神奇地出现,就像它们一直在那里一样。
什么是有趣的,是textLabel和detailTextLabel总是可见的,总是正确的第一部分,但由于某种原因,按钮就是不想正确工作。
下面是创建UITableView的前3个方法实现:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2 ;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(section == 0)
return [self.potentiaFriendsInParseFirstNamesArray count];
if(section == 1)
return [self.potentiaFriendsNotInParseFirstNamesArray count];
else return 0;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if(section == 0)
return @"Friends Using The App";
if(section == 1)
return @"Send to Contact";
else return @"nil";
}
然后这里是我的cellForRowAtIndexPath
功能实现它在创建UITableView中做大部分工作它实际上为每一行创建UIButton设置。if else语句实际上有两组几乎相同的代码,唯一不同的是一组用于表视图的section 1另一组用于section 2:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"SettingsCell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (indexPath.section == 0) {
NSString *firstNameForTableView = [self.potentiaFriendsInParseFirstNamesArray objectAtIndex:indexPath.row];
PFUser *user = [self.allUsersInParse objectAtIndex:indexPath.row];
UIImage *addUserButtonImage = [UIImage imageNamed:@"SliderThumb-Normal-g"];
UIImage *addUserButtonImageHighlighted = [UIImage imageNamed:@"SliderThumb-Normal"];
UIButton *addUserButton = [[UIButton alloc]init];
addUserButton.frame = CGRectMake(237, -10, 64, 64);
[addUserButton setImage:addUserButtonImage forState:UIControlStateNormal];
[addUserButton setImage:addUserButtonImageHighlighted forState:UIControlStateHighlighted];
[addUserButton setImage:addUserButtonImageHighlighted forState:UIControlStateSelected];
[addUserButton addTarget:self action:@selector(handleTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
addUserButton.tag = indexPath.row;
[cell.textLabel setText:firstNameForTableView];
[cell.detailTextLabel setText:user.username];
[cell.contentView addSubview:addUserButton];
} else {
NSString *firstNameForTableView2 = [self.potentiaFriendsNotInParseFirstNamesArray objectAtIndex:indexPath.row];
NSString *userNameForTableView2 = [self.potentiaFriendsPhoneNumberArray objectAtIndex:indexPath.row];
UIImage *addFriendButtonImage = [UIImage imageNamed:@"SliderThumb-Normal-G"];
UIImage *addFriendButtonImageHighlighted = [UIImage imageNamed:@"SliderThumb-Normal"];
UIButton *addFriendButton = [[UIButton alloc]init];
addFriendButton.frame = CGRectMake(237, -10, 64, 64);
[addFriendButton setImage:addFriendButtonImage forState:UIControlStateNormal];
[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateHighlighted];
[addFriendButton setImage:addFriendButtonImageHighlighted forState:UIControlStateSelected];
[addFriendButton addTarget:self action:@selector(handleTouchUpInsideForNonUsers:) forControlEvents:UIControlEventTouchUpInside];
addFriendButton.tag = indexPath.row;
[cell.textLabel setText:firstNameForTableView2];
[cell.detailTextLabel setText:userNameForTableView2];
[cell.contentView addSubview:addFriendButton];
}
return cell;
}
这简直要把我逼疯了,我在过去的9个小时里一直在试图弄清楚这个问题,但还是没有弄清楚。
图像名称区分大小写,addUserButtonImage
是"SliderThumb-Normal-g"在你的第一节,而它是"SliderThumb-Normal-g"在第二节!