我有一个包含文章标题列表的表格视图。我已经实现了通过滑动删除和存档这些文章的功能(左滑动 - 存档,右滑动 - 删除)。它工作得很好(就像在iPhone上名为“Clear”的应用程序)。
然后,我已经从一个单元格(按住ctrl按钮)拖动到新的视图控制器(我有标签,imageview和textview)来显示文章(推送)。但是,不知何故细胞不可点击。我可以毫无问题地滑动,但无法点击并转到下一个视图控制器。我使用- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
来设置要显示的数据。另外,我使用教程配置单元格。我也已经包含了实现。我想,这就是问题所在,但我不知道代码是如何配置单元格的。这种行为的原因是什么?谢谢。
InboxViewController.m的代码(具有tableview的代码):
. . .
#pragma mark view
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.db openDatabase];
NSString* date_added = [self.db getLastArticleDate];
[self makeConnetion:(id)date_added];
NSLog(@"viewWillAppear: self.articles: %d", self.articles.count);
[self.db closeDatabase];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.dataSource = self;
self.tableView.delegate = self;
self.tableView.separatorColor = [UIColor clearColor];
self.tableView.backgroundColor = [UIColor blackColor];
[self.tableView registerClass:[SHCTableViewCell class] forCellReuseIdentifier:@"Content"];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
NSLog(@"numberOfRowsInSection: self.articles: %d", self.articles.count);
return self.articles.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Content";
SHCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.textLabel.backgroundColor = [UIColor clearColor];
//NSMutableArray* safeArticles = self.articles;
// Configure the cell...
Article* article = [self.articles objectAtIndex:indexPath.row];
NSString *listingKey = article.title;
NSString *listingValues = article.url;
cell.textLabel.text = listingKey;
cell.detailTextLabel.text = listingValues ;
cell.delegate = self;
cell.todoItem = article;
return cell;
}
#pragma mark cell atributes
-(UIColor*)colorForIndex:(NSInteger) index {
NSUInteger itemCount = self.articles.count - 1;
float val = ((float)index / (float)itemCount) * 0.6;
return [UIColor colorWithRed: 1.0 green:val blue: 0.0 alpha:1.0];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 70.0f;
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
cell.backgroundColor = [self colorForIndex:indexPath.row];
}
#pragma mark TODO delete from server database
//method to delete an article form view and to call method to delete from database, as well as form server database
-(void)deleteArticle:(Article*)articleToDelete {
. . .
}
#pragma mark TODO archive in server database
//method to delete an article form view and to call method to delete from database, as well as form server database
-(void)archiveArticle:(Article*)articleToArchive {
. . .
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ArticleView"]) {
ArticleViewController* articleView = (ArticleViewController*) segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
NSInteger index = indexPath.row;
Article *article = [self.articles objectAtIndex:index];
articleView.article_title.text = article.title;
articleView.article_content.text = article.content;
}
}
SHCTableViewCell.m(配置单元格)
//
// SHCTableViewCell.m
// ClearStyle
//
// Created by Fahim Farook on 23/9/12.
// Copyright (c) 2012 RookSoft Pte. Ltd. All rights reserved.
//
#import "SHCTableViewCell.h"
#import <QuartzCore/QuartzCore.h>
@implementation SHCTableViewCell {
CAGradientLayer* _gradientLayer;
CGPoint _originalCenter;
BOOL _deleteOnDragRelease;
CALayer *_itemCompleteLayer;
BOOL _markCompleteOnDragRelease;
UILabel *_tickLabel;
UILabel *_crossLabel;
}
const float UI_CUES_MARGIN = 20.0f;
const float UI_CUES_WIDTH = 50.0f;
-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// add a tick and cross
_tickLabel = [self createCueLabel];
_tickLabel.text = @"Archive";
_tickLabel.textAlignment = NSTextAlignmentRight;
[self addSubview:_tickLabel];
_crossLabel = [self createCueLabel];
_crossLabel.text = @"Delete";
_crossLabel.textAlignment = NSTextAlignmentLeft;
[self addSubview:_crossLabel];
// create a label that renders the todo item text
// remove the default blue highlight for selected cells
self.selectionStyle = UITableViewCellSelectionStyleNone;
// add a layer that overlays the cell adding a subtle gradient effect
_gradientLayer = [CAGradientLayer layer];
_gradientLayer.frame = self.bounds;
_gradientLayer.colors = @[(id)[[UIColor colorWithWhite:1.0f alpha:0.2f] CGColor],
(id)[[UIColor colorWithWhite:1.0f alpha:0.1f] CGColor],
(id)[[UIColor clearColor] CGColor],
(id)[[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]];
_gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f];
[self.layer insertSublayer:_gradientLayer atIndex:0];
// add a layer that renders a green background when an item is complete
_itemCompleteLayer = [CALayer layer];
_itemCompleteLayer.backgroundColor = [[[UIColor alloc] initWithRed:0.0 green:0.6 blue:0.0 alpha:1.0] CGColor];
_itemCompleteLayer.hidden = YES;
[self.layer insertSublayer:_itemCompleteLayer atIndex:0];
// add a pan recognizer
UIGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
recognizer.delegate = self;
[self addGestureRecognizer:recognizer];
}
return self;
}
const float LABEL_LEFT_MARGIN = 20.0f;
-(void)layoutSubviews {
[super layoutSubviews];
// ensure the gradient layers occupies the full bounds
_gradientLayer.frame = self.bounds;
_itemCompleteLayer.frame = self.bounds;
_tickLabel.frame = CGRectMake(-UI_CUES_WIDTH - UI_CUES_MARGIN, 0,
UI_CUES_WIDTH, self.bounds.size.height);
_crossLabel.frame = CGRectMake(self.bounds.size.width + UI_CUES_MARGIN, 0,
UI_CUES_WIDTH, self.bounds.size.height);
}
-(void)setTodoItem:(Article *)todoItem {
_todoItem = todoItem;
// we must update all the visual state associated with the model item
//_label.text = todoItem.text;
_itemCompleteLayer.hidden = !todoItem.completed;
}
// utility method for creating the contextual cues
-(UILabel*) createCueLabel {
UILabel* label = [[UILabel alloc] initWithFrame:CGRectNull];
label.textColor = [UIColor whiteColor];
label.font = [UIFont boldSystemFontOfSize:15.0];
label.backgroundColor = [UIColor clearColor];
return label;
}
#pragma mark - horizontal pan gesture methods
-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
CGPoint translation = [gestureRecognizer translationInView:[self superview]];
// Check for horizontal gesture
if (fabsf(translation.x) > fabsf(translation.y)) {
return YES;
}
return NO;
}
-(void)handlePan:(UIPanGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateBegan) {
// if the gesture has just started, record the current centre location
_originalCenter = self.center;
}
if (recognizer.state == UIGestureRecognizerStateChanged) {
// translate the center
CGPoint translation = [recognizer translationInView:self];
self.center = CGPointMake(_originalCenter.x + translation.x, _originalCenter.y);
// determine whether the item has been dragged far enough to initiate a delete / complete
_markCompleteOnDragRelease = self.frame.origin.x > self.frame.size.width / 2;
_deleteOnDragRelease = self.frame.origin.x < -self.frame.size.width / 2;
// Context cues
// fade the contextual cues
float cueAlpha = fabsf(self.frame.origin.x) / (self.frame.size.width / 2);
_tickLabel.alpha = cueAlpha;
_crossLabel.alpha = cueAlpha;
// indicate when the item have been pulled far enough to invoke the given action
_tickLabel.textColor = _markCompleteOnDragRelease ?
[UIColor greenColor] : [UIColor whiteColor];
_crossLabel.textColor = _deleteOnDragRelease ?
[UIColor redColor] : [UIColor whiteColor];
}
if (recognizer.state == UIGestureRecognizerStateEnded) {
// the frame this cell would have had before being dragged
CGRect originalFrame = CGRectMake(0, self.frame.origin.y,
self.bounds.size.width, self.bounds.size.height);
if (!_deleteOnDragRelease) {
// if the item is not being deleted, snap back to the original location
[UIView animateWithDuration:0.2
animations:^{
self.frame = originalFrame;
}
];
}
if (_deleteOnDragRelease) {
// notify the delegate that this item should be deleted
[self.delegate deleteArticle:self.todoItem];
}
if (!_markCompleteOnDragRelease) {
// if the item is not being deleted, snap back to the original location
[UIView animateWithDuration:0.2
animations:^{
self.frame = originalFrame;
}
];
}
if (_markCompleteOnDragRelease) {
// mark the item as complete and update the UI state
self.todoItem.completed = YES;
[self.delegate archiveArticle:self.todoItem];
}
}
}
@end
答案 0 :(得分:0)
如果您想在单击tableview单元格后执行任何操作,请使用tableview委托方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"selected cell");
}