0

UITableViewCellcoreData属性を使用してを構成しています。テキストを表示することはできますが、ボタンをクリックするだけでセルに他のデータを再読み込みしたいと思います。

-(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
  Book *entity = [self.fetchedResultsController objectAtIndexPath:indexPath];
  firstLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 10, 120, 21)];
  secondLabel = [[UILabel alloc]initWithFrame:CGRectMake(120, 10, 120, 21)];

  firstLabel.text = entity.title;
  secondLabel.text = entity.author;

  [cell.contentView addSubview:firstLabel];
  [cell.contentView addSubview:secondLabel];

  //On button Click i want to change firstLabel.text = entity.date and secondlabel.text =   entity.details

}
4

2 に答える 2

1

このコードを試してください..

グローバル変数を設定

int buttonCliked;

ボタンのアクションを設定

- (IBAction)aaaa:(id)sender
{
    buttonCliked =1;
    [_myTable reloadData];
}

tableviewCell にデータをロードする

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

Book *entity = [self.fetchedResultsController objectAtIndexPath:indexPath];

firstLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 10, 120, 21)];
secondLabel = [[UILabel alloc]initWithFrame:CGRectMake(120, 10, 120, 21)];

if(!buttonClicked)
{
    firstLabel.text = entity.title;
    secondLabel.text = entity.author;
}
else
{
    firstLabel.text =  entity.date;
    secondLabel.text = entity.details;

    if(indexPath.row >= [tableView numberOfRowsInSection:indexPath.section] && indexPath.section >= [tableView numberOfSections])
    {
        buttonCliked =0;
    }

}

[cell.contentView addSubview:firstLabel];
[cell.contentView addSubview:secondLabel];

return cell;


}
于 2013-02-25T13:19:43.117 に答える
0

1) すべてのボタンを含むカスタム セルを作成する

2) 好きなすべてのイベント (SendType、LikeType など) の列挙型を作成します。

3) セルのプロトコルを作成します。デリゲートはすべてのセルのコントローラーでなければなりません。

4)6つのボタンのアクションはセルにとどまる必要があり、セルはそのデリゲートを呼び出して、イベントの種類にENUMを渡し、セル参照を追加します。

5) コントローラは、必要なプロトコル メソッドによって呼び出され、セル参照とイベントのタイプを使用して何を行うかを決定します。

すなわち 1) カスタム セル (ContactCell) を作成し、以下を追加します。

property (id<TapOnSixButtonsProtocol>) tapDelegate;

  - (void)fillCellWithID:(NSString*)ID
             idContact: (NSString*)idContact
          withDelegate: (id<TapOnSixButtonsProtocol>) tapDelegate;
{
    self.tapDelegate = tapDelegate

2)

typedef NS_ENUM(NSInteger, CustomTypeOfEvent) {
    Like = 1,
    Send =  2,..
};

3)

   @protocol TapOnSixButtonsProtocol <NSObject>
    -(void)didClickonCell: (CustomCell*)cell withType:(CustomTypeOfEvent)t;
    @end

4)

self.Btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
[self.Btn1  addTarget:self
                  action:@selector(tapped:)
        forControlEvents:UIControlEventTouchUpInside];
self.Btn1.tag = Like;
(repeat for all...)

..

   void tapped:(UIBUtton*)sender{
        CustomTypeOfEvent t = sender.tag // get back type..
        [self.tapDelegate didClickOnCell: self withType];

5) コントローラーで:

in: - (UITableViewCell *)tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  ContactCell cell = [tableView dequeueReusable..
   [cell fillCellWithID: @"234444"
                 idContact: "67899999"
              withDelegate: self];


//delegate:
    -(void)didClickOnCell: (CustomCell*)cell withType:(CustomTypeOfEvent)t {
       switch(t){...
    }
于 2016-08-20T10:32:56.393 に答える