0

我有一个自定义 UIView,里面有一个 UITableView。我通过接口生成器连接委托和数据源,它看起来像这样: http: //postimg.org/image/nj9elaj4h/(可能还没有上传图片:()

当我加载视图时,数据会按原样显示。但是当我尝试调用 reloadData 时,什么也没有发生。我检查了 uitableview 是否设置,但它是 NULL。但是,只要我拖动 tableView 并重新加载它的视图,就会显示新数据。任何人都知道为什么 reloadData 不起作用?

.h 看起来像这样:

@interface NextTitleView :   UIView<UITableViewDataSource,UITableViewDelegate,SociusClientDelegate,UIActionSheetDelegate,Ne     xtTitleCustomCellDelegate>
 {
NexTitleCustomCell* _cellInFocus;
}

@property(nonatomic,retain)IBOutlet UITableView* _tableViewNextTitle;

@end

感谢您的帮助:D

编辑:添加 .m 文件

@implementation NextTitleView
@synthesize _tableViewNextTitle;
- (id)initWithFrame:(CGRect)frame
 {
self = [super initWithFrame:frame];
if (self) {
    // Initialization code
}
return self;
}

  -(id)init
{
if(self)
{
    [SharedSingeltons sharedInstance]._client.delegateCustomClient = self;
    _tableViewNextTitle = [[UITableView alloc]init];
}

return self;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
return 2;
}

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if(section == 0)
    return @"Now playing";
if(section == 1)
    return @"Comming Next";
else
    return @"";
 }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == 0)
    return 1;
if (section == 1)
    return [[SharedSingeltons sharedInstance]._client._musicList count];
else
    return 0;

  }

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

NexTitleCustomCell* cell = [[NexTitleCustomCell alloc]init];
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NextTitleCustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0];

MusicItem* item = [[SharedSingeltons sharedInstance]._client._musicList
                   objectAtIndex:indexPath.row];
cell.delegate = self;
cell._labelSongTitle.text = item._songTitle;
cell._labelSongTitle.textColor = [UIColor blackColor];
cell._labelSubtitle.text = item._artist;
cell._identifier = item._songIdentifier;
cell._labelRating.text = item._rating.stringValue;

return cell;
 }

-(void)clientDidReceiveMusicList:(SociusClient *)sender list:(NSMutableArray *)array
  {
   for(MusicItem* item in [SharedSingeltons sharedInstance]._client._musicList)
{
    NSLog(@"rating:%@",item._rating);
}
NSLog(@"TAbleVIEW:%@",_tableViewNextTitle);
[self._tableViewNextTitle reloadData];

}

  -(void)didPressActionButton:(NexTitleCustomCell *)sender
    {
     NSLog(@"Show alert view");

   _cellInFocus = sender;
      UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:nil  delegate:self  cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Vote Up",  @"Like",@"Remember", nil];
[popupQuery showInView:self];
   }

  -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
   {
      if(buttonIndex == 0)
    {
    NSLog(@"Vote up");
    [self sendUpdateVoteForSong];
   }
   }

 -(void)sendUpdateVoteForSong
{
NSMutableDictionary* dict = [[NSMutableDictionary alloc]init];
[dict setObject:_cellInFocus._identifier forKey:@"Vote"];
NSLog(@"Identifier:%@",_cellInFocus._identifier);

[[SharedSingeltons sharedInstance]._client sendObject:dict error:nil];
 }



    @end
4

4 回答 4

0

我会说你调用 reload data 太快了,可能在initWithNibName,你应该在viewDidLoad.

于 2013-09-10T13:00:16.867 回答
0

我只是设置了一个 uiviewcontroller 来处理视图。现在它工作正常。

于 2013-09-11T18:03:32.163 回答
0

我认为是 UIActionSheet 导致了问题,你可以尝试 reloadData 两次。

于 2016-07-06T12:53:23.363 回答
0
  1. 我注意到您正在新建您的表格视图,但它是一个插座......如果它是一个 IBOutlet,您不需要分配初始化您的表格视图。因此,要么摆脱 IBOutlet,将其声明为属性(但随后您需要确保以编程方式布置表格视图),或者保留 IBOutlet,并摆脱分配初始化它的代码。目前,您的数据源和委托也是从 IB 设置的,因此如果您分配初始化您的表视图,这些将不再设置...

  2. tableview 出口不应为零。

你能在 awakeFromNib 中放一个断点,看看那里的 TableView 插座是否为 NIL 吗?

您是否通过正确使用其 NIB 文件来加载包含表视图的视图类?

如果您只是在情节提要中嵌入 View 类,它不会自动加载 NIB。在这种情况下,我通常使用 View 容器,然后以编程方式加载 NIB,并以编程方式将加载的视图嵌入到视图容器中。

NSArray *arrayXibObjects = [[NSBundle bundleWithIdentifier:@"net.mycompany.myappid"] loadNibNamed:@"myNibName" owner:nil options:nil];

for (id object in arrayXibObjects) {
   if ([object isKindOfClass:myNibsClass]) {
       return object;   // this is your class loaded from NIB
   }  
}

此代码可以放置在实用程序方法中,以使其可以通过 1 行代码访问。

返回的类将使 IBOutlets 从 NIB 连接到其各自的类。

现在检查调试器:

po [loadedClassFromNib tableView] // should not be NIL

然后像这样将加载的NIB嵌入容器中:(或使用约束)

[self.viewContainer addSubview: classLoadedFromNib];
classLoadedFromNib.frame = self.viewContainer.frame;
于 2016-07-06T16:59:27.557 回答