2016-12-28 6 views
0

Я создаю пользовательскую ячейку в xamarin iOS. В ячейке у меня есть две кнопки, которые отображаются на рисунке ниже.Два события нажатия кнопки в одной ячейке в TableView в iOS (Xamarin)

Рисунок:

enter image description here

Две кнопки являются:

  1. Создать Назначение
  2. Посмотреть подробности

Я хочу создать это два разных события click Button в классе My Source, чтобы я мог отправлять данные в другой ViewController для своей цели.

Код: TableCell класс:

public partial class CaseHistoryTableCell : UITableViewCell 
    { 
     public static readonly NSString Key = new NSString("CaseHistoryTableCell"); 
     public static readonly UINib Nib; 

     static CaseHistoryTableCell() 
     { 
      Nib = UINib.FromName("CaseHistoryTableCell", NSBundle.MainBundle); 
     } 

     public CaseHistoryTableCell(IntPtr handle) : base(handle) 
     { 
      // Note: this .ctor should not contain any initialization logic. 
     } 

     public static CaseHistoryTableCell Create() 
     { 
      return (CaseHistoryTableCell)Nib.Instantiate(null, null)[0]; 
     } 

     public void BindData(string hospitalLabel, string addressLabel, string drLabel, string patientLabel) 
     { 
      this.lbl_hospitalName.Text = hospitalLabel; 
      this.lbl_address.Text = addressLabel; 

      this.lbl_drName.Text = drLabel; 
      this.lbl_patientName.Text = patientLabel; 

      this.lbl_address.TextColor = UIColor.Clear.FromHexString("#000000", 0.54f); 
      this.lbl_patientName.TextColor = UIColor.Clear.FromHexString("#000000", 0.54f); 
      this.lbl_caseDate.TextColor = UIColor.Clear.FromHexString("#000000", 0.54f); 
      this.lbl_scheDate.TextColor = UIColor.Clear.FromHexString("#000000", 0.54f); 
      this.lbl_hospitalName.TextColor = UIColor.Clear.FromHexString("#000000", 0.87f); 
      this.lbl_drName.TextColor = UIColor.Clear.FromHexString("#000000", 0.87f); 

      this.btn_createAppointment.SetTitleColor(UIColor.Clear.FromHexString("#0072BA", 1.0f), UIControlState.Normal); 
      this.btn_viewDetail.SetTitleColor(UIColor.Clear.FromHexString("#0072BA", 1.0f), UIControlState.Normal); 
     } 

     public override CGRect Frame 
     { 
      get 
      { 
       return base.Frame; 
      } 

      set 
      { 
       value.Y += 4; 
       value.Height -= 2 * 4; 
       base.Frame = value; 
      } 
     } 

    } 

Источник Класс:

public class CaseHistorySourceClass : UITableViewSource 
     { 
      private List<CaseSearchItem> caseSearchItems; 
      public CaseSearchItem caseSearchItem; 
      public static event EventHandler RowClicked; 

      public CaseHistorySourceClass(List<CaseSearchItem> caseSearchItems) 
      { 
       this.caseSearchItems = caseSearchItems; 
      } 

      public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
      { 
       CaseHistoryTableCell cell = tableView.DequeueReusableCell(CaseHistoryTableCell.Key) as CaseHistoryTableCell ?? CaseHistoryTableCell.Create(); 
       var item = caseSearchItems[indexPath.Row]; 

       cell.BindData(item.Organization, item.Address, item.Doctor, item.UserName); 

       cell.Layer.MasksToBounds = false; 
       cell.Layer.CornerRadius = 10.0f; 
       cell.BackgroundColor = UIColor.White; 
       cell.SetNeedsLayout(); 
       cell.LayoutIfNeeded(); 
       return cell; 
      } 


      public override nint RowsInSection(UITableView tableview, nint section) 
      { 
       return caseSearchItems.Count; 
      } 
     } 

Мой вопрос:

Это возможно создать два разных события нажатия кнопки в одной ячейке.

Если да, то как?

и Если нет, то что альтернативно выполнять этот тип операции.

Примечание: Я не хочу требовать RowSelected. Я только требую, чтобы выполнить два разных нажатия кнопки.

ответ

1

Вы можете сделать это путем добавления целевого действия на кнопку из метода GetCell:

первых добавить следующее в своем классе ячейки, чтобы сделать кнопки доступными:

public UIButton btnCreateAppointment { 

      get 
      { 
       return this.btn_createAppointment; 
      } 
     } 


     public UIButton btnViewDetail 
     { 

      get 
      { 
       return this.btn_viewDetail; 
      } 
     } 

Теперь из модифицировать свой метод GetCell добавить цель действия

cell.btnCreateAppointment.tag = indexPath.Row; 
cell.btnViewDetail.tag = indexPath.row; 


//assign action 
cell.btnCreateAppointment.TouchUpInside += (sender, e) => 
      { 
       var row = ((UIButton)sender).Tag; 
       var item = caseSearchItems[row]; 

      }; 
cell.btnViewDetail.TouchUpInside += (sender, e) => 
      { 
       var row = ((UIButton)sender).Tag; 
       var item = caseSearchItems[row]; 

      }; 
+0

Он говорит, что 'cell.btn_createAppointment.tag' недоступен для уровня защиты. – Ironman

+0

Определите свойство для btn_createAppointment в своей ячейке. Я могу видеть его не публичный член. – Darshana

+0

Если у вас уже есть свойство btnCreateAppointment и оно доступно, используйте вместо него cell.btnCreateAppoint. – Darshana

2

Не выполняйте такую ​​операцию на RowSelected Настройка цели с помощью селектора поможет вам.

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
      { 
       CaseHistoryTableCell cell = tableView.DequeueReusableCell(CaseHistoryTableCell.Key) as CaseHistoryTableCell ?? CaseHistoryTableCell.Create(); 
       var item = caseSearchItems[indexPath.Row]; 

// setTag to button to identify in which row button is pressed 
cell.btnCreateAppointment.tag=indexPath.Row; 
cell.btnViewDetail.tag=indexPath.row; 

// set Target to a method 
cell.btnCreateAppointment.TouchUpInside += createAppointment; 
ell.btnViewDetail.TouchUpInside +=viewDetail; 


      } 

этих методов будет вызываться при нажатии кнопки вы

public void createAppointment(object sender, EventArgs e) 
{ 
var row=sender.tag; 

} 

Вторая кнопка Нажал событие

public void viewDetail(object sender, EventArgs e) 
{ 
var row=sender.tag; 

} 

я надеюсь, что эта работа.

+0

Подождите, я попробую и вернусь к вам в ближайшее время. – Ironman

+0

https://forums.xamarin.com/discussion/15560/how-to-add-a-custom-button-in-a-table-cell Пожалуйста, посмотрите здесь .... как поставить обычай и как настроить его цель. – Dhiru

+0

Спасибо, что помогите мне. – Ironman