开发者

UITableViewCell's contentView's content not visible when using UISearchDisplayController

I have written a simple contact manager application that uses a UITableView to display the contacts. Each contact is shown as a standard UITableViewCell; custom content is created as UIButtons and UILabels that are added as subviews of the cell's contentView. My table viewController's cellForRowAtIndexPath method includes:

UIButton *emailButton;
UITableViewCell *cell = 
        [theTableView dequeueReusableCellWithIdentifier:@"My Identifier"];
if (cell == nil) 
   {
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier] autorelease];
     emailButton = [UIButton buttonWithType:UIButtonTypeCustom];
     [emailButton setImage:emailImage forState:UIControlStateNormal];
     emailButton.tag = EMAIL_BUTTON_TAG;
     emailButton.frame = emailButtonFrame;
     [cell.contentView addSubview:emailButton];
   } else {
     emailButton = (UIButton *)[cell viewWithTag:EMAIL_BUTTON_TAG];
   }
... set various attributes of the cell, including the content of custom labels
... added as subviews of the contentView exactly as above

This works fine when rendering my table. But I've also added a search bar to my app, set the search bar's controller appropriately, and set the controller's delegate back to this same tableController such that the exact same cellForRowAtIndexPath method is called when performing the searches, and of course I filter the set of cells to be displayed to match the query.

What I see is that when I perform a search, all of the content that I display by setting cell.textLabel.text or cell.imageView.image shows up perfectly in the table, but the emailButton or the labels that I added as subviews of the cell's contentView don't appear. In the debugger, I can clearly see that these controls (the buttons and labels) exist at the time that cellForRowAtIndexPath is ca开发者_JAVA百科lled while search filtering is going on. But the controls don't render.

I feel there must be something very subtle in the interactions between table cells and the searchView, but I'm missing it.


Setting the textLabel's text property appears to also bring the textLabel to the front. Even though the text label does not appear to overlap with any of the content view's buttons, this is causing the buttons to disappear. Forcing them to the front after the textLabel is updated makes the problem go away.

It is not clear why this behavior is only appearing in the search case and not in the normal case, but I was able to reproduce it in a simple change to the iOS "TableSearch" example.


you can check if

identifier in *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:identifier] autorelease];

is equalt to "My Identifier" from [theTableView dequeueReusableCellWithIdentifier:@"My Identifier"]; if not you can get empty cell, which you can use it's cell.imageView and cell.textLabel but does not have the contentView subviews.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜