我有7个自定义单元格的tableview。细胞足够大,任何时候只有5个细胞适合屏幕。根据内容,不同的单元格是用户可配置的,这就是我注意到有一些奇怪的事情发生的原因。当表首次加载,并向下滚动以第一次查看所有单元格时,单元格内容都是正确的。然而,奇怪的是,一旦你上下滚动几次使得顶部细胞和底部细胞从屏幕上消失几次,底部细胞的内容将获得第一个细胞的特性。
请注意,willDisplayCell中根本没有代码,因此没有理由因为滚动而改变内容。此外,所有滚动都没有在任何单元格中注册触摸。我有一种强烈的感觉,这是某种出局问题。无论滚动量多少,我需要做些什么来确保单元格的内容保持稳定?
这是TVC代码:
import Foundation
import UIKit
class adventureTVC: UITableViewController {
var focusArray: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
// General Setup
self.title = selectedGenre
self.tableView.rowHeight = 98.0
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
self.view.backgroundColor = UIColor(red: 0.8, green: 0.8, blue: 0.8, alpha: 1.0)
self.tableView.contentInset.bottom = 49
// Registering the custom cell
let nib = UINib(nibName: "StarsAcrossCell", bundle: nil)
tableView.registerNib(nib, forCellReuseIdentifier: "starsCell")
// Data used by this TVC. This should be the Genre for which ever cell was touched to get here
focusArray = bookage.focusArray()
}
override func viewWillAppear(animated: Bool) {
tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
return focusArray.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: StarsAcrossCell = self.tableView.dequeueReusableCellWithIdentifier("starsCell") as! StarsAcrossCell
cell.selectionStyle = .None
cell.groupTypeLabel.text = focusArray[indexPath.row]
cell.cellBorder.backgroundColor = getCellColor(indexPath.row)
let statusArray = bookage.getReadStatusArrayForFocus(selectedCategory, genre: selectedGenre, focus: focusArray[indexPath.row])
setStarImages(statusArray, cell: cell)
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}
}
答案 0 :(得分:2)
似乎是细胞重用问题。您需要在自定义单元类中实现-prepareForReuse方法,并将所有单元属性设置为默认值。
$scope.deleteSong = function($songName, $artist, $link) {
// Posting data to php file
$http({
method : 'POST',
url : 'ajax/deleteSong.php',
data : {'song':$songName},//Changed Line Here
headers : {'Content-Type': 'application/x-www-form-urlencoded'}
})
.success(function(data) {
if (data.errors) {
// Showing errors.
$scope.errorSong= data.errors.song;
$scope.errorArtist= data.errors.artist;
$scope.errorLink= data.errors.link;
} else {
$scope.message = data.message;
}
});
$scope.user = null
如果UITableViewCell对象是可重用的 - 也就是说,它具有重用性 identifier - 在返回对象之前调用此方法 来自UITableView方法dequeueReusableCellWithIdentifier:。对于 性能原因,你应该只重置那个单元格的属性 与内容无关,例如,alpha,编辑和选择 州。 tableView中的表视图委托:cellForRowAtIndexPath: 重复使用单元格时应始终重置所有内容。如果是细胞 对象没有关联的重用标识符,此方法是 不叫。如果重写此方法,则必须确保调用 超类实现。
答案 1 :(得分:0)
首先创建customtableviewcell(如果你还没有创建它)
RatingViewCell.h
@interface RatingViewCell : UITableViewCell<RatingViewDelegate>
@property (strong, nonatomic) IBOutlet UILabel *lblTitle;
@property (strong, nonatomic) RatingView *ratingView;
@end
RatingViewCell.m
@implementation RatingViewCell
@synthesize lblTitle,ratingView2;
- (void)awakeFromNib
{
// Initialization code
ratingView2 = [[RatingView alloc] initWithFrame:CGRectMake(-10,22,130,15)
selectedImageName:@"RatingStartBig"
unSelectedImage:@"RatingStartBigBlank"
minValue:0
maxValue:5
intervalValue:0.5
stepByStep:NO];
ratingView2.userInteractionEnabled = NO;
ratingView2.delegate = self;
[self.contentView addSubview:ratingView2];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
然后在tableview的CellforRow方法中使用此customCell作为
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CellID";
RatingViewCell *cell = (RatingViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
cell = [[RatingViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}
cell.lblTitle.text = @"Title"; // use array to pass values dynamically
cell.ratingView2.value = 2.0; // use array to pass values dynamically
return cell;
}