【问题标题】:Segue not working, cell not selectingSegue 不工作,单元格不选择
【发布时间】:2014-11-08 05:02:03
【问题描述】:

晚上,

我已设法按字母顺序 (:D) 对表格进行分区,但现在单元格未选择。 这个想法是第一个视图呈现一个单词列表。然后选择一个词,这会导致一个以词汇表为特色的详细视图。但是,单元格没有选择(变成灰色而不是蓝色?)并且故事板中从原型单元格运行到新视图的 segue 没有做任何事情(单击模拟器中的单元格不会导致 segue)。

有人有什么建议吗?

我在下面包含了我的代码,prepareforsegue 代码可以在需要时使用。

谢谢大家:)

@interface RCViewController ()

@end

@implementation RCViewController

static NSString *CellIdentifier = @"Cell Identifier";

@synthesize fruits;

-(NSDictionary *)alphabetizedFruits:(NSArray *)fruitsArray {
NSMutableDictionary *buffer = [[NSMutableDictionary alloc]init];

for (int i=0; i <fruits.count; i++) {
    NSString *fruit = [fruits objectAtIndex:i];
    NSString *firstLetter = [[fruit substringToIndex:1]uppercaseString];

    if ([buffer objectForKey:firstLetter]) {
        [(NSMutableArray *)[buffer objectForKey:firstLetter]addObject:fruit];
    }
    else {
        NSMutableArray *mutableArray = [[NSMutableArray alloc]initWithObjects:fruit, nil];
        [buffer setObject:mutableArray forKey:firstLetter];
    }
}
NSArray *keys = [buffer allKeys];
for (int j; j<keys.count; j++) {
    NSString *key = [keys objectAtIndex:j];
    [(NSMutableArray *)[buffer objectForKey:key]sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
}
NSDictionary *result = [NSDictionary dictionaryWithDictionary:buffer];
return result;
 }

 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSArray *keys = [self.alphabetizedFruits allKeys];
return [keys count];
}

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSArray *unsortedKeys = [self.alphabetizedFruits allKeys];
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [sortedKeys objectAtIndex:section];
NSArray *fruitsForSection = [self.alphabetizedFruits objectForKey:key];
return  [fruitsForSection count];
 }

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


NSArray *unsortedKeys = [self.alphabetizedFruits allKeys];
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [sortedKeys objectAtIndex:[indexPath section]];
NSArray *fruitsForSection = [self.alphabetizedFruits objectForKey:key];
NSString *fruit = [fruitsForSection objectAtIndex:[indexPath row]];

[cell.textLabel setText:fruit];

return cell;
 }

 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section    {
NSArray *keys = [[self.alphabetizedFruits allKeys]sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [keys objectAtIndex:section];
return key;
}

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"showDetail"]) {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    detailViewController *destViewController = segue.destinationViewController;
    destViewController.word = [fruits objectAtIndex:indexPath.row];
}
}


- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

NSString *path = [[NSBundle mainBundle]pathForResource:@"words" ofType:@"plist"];
NSArray *wordsDictionary = [NSArray arrayWithContentsOfFile:path];
self.fruits = [wordsDictionary valueForKey:@"Word"];

self.alphabetizedFruits = [self alphabetizedFruits:self.fruits];

[self.tableView registerClass:[UITableViewCell class]   forCellReuseIdentifier:CellIdentifier];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

【问题讨论】:

  • 你确定你有正确的segue标识符吗?你有没有在 prepare for segue 方法中设置断点来看看发生了什么?
  • 它变成灰色的事实意味着它正在被选中。在 prepareForSegue 的第一行输入一个登录信息,然后查看是否调用了该方法。

标签: ios objective-c uitableview


【解决方案1】:

你需要添加 didSelectRowAtIndexPath 方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // confirm cell is being selected
    NSLog(@"didSelectRowAtIndexPath");

    // perform the segue by getting the cell selected and passing it to the prepareForSegue method
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [self performSegueWithIdentifier:@"showDetail" sender:cell];
}

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2018-06-28
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多