我有一个导航控制器在桌子上显示一个列表o项目,然后我需要触摸一个项目,显示该项目的详细信息。
这是我填写表格的代码:
public void SearchHotel (){
Hotel hotel = new Hotel();
var distribution = new HotelDistribution[]{new HotelDistribution(){ Adults = 1, Children = 0, ChildrenAges = new int[0]} };
var items = hotel.SearchHotels(Convert.ToDateTime("2013-08-08"),Convert.ToDateTime("2013-09-09 "),"(MIA)", distribution,"","","",0);
data = new List<DtoHotelinformation>();
foreach (var item in items)
{
DtoHotelinformation DtoHotelinformation = new DtoHotelinformation();
DtoHotelinformation.code = item.Code.ToString();
DtoHotelinformation.price = item.Price.ToString();
DtoHotelinformation.title = item.Name.ToString().ToTitleCase();
DtoHotelinformation.subtitle = item.Address.ToString();
DtoHotelinformation.rating = item.Rating.ToString();
DtoHotelinformation.imageUlr = item.ImageUrl;
data.Add(DtoHotelinformation);
}
hud.Hide(true);
hud.RemoveFromSuperview();
HotelSearchTable.Source = new HotelTableSource(data.ToArray());
HotelSearchTable.ReloadData();
}
因为我正在使用storyboard来显示详细信息视图控制器,所以在我的表源代码中有这个代码:
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
if (RowTouched != null) {
RowTouched (this, EventArgs.Empty);
}
tableView.DeselectRow (indexPath, true); // normal iOS behaviour is to remove the blue highlight
}
回到我的viewcontroller我调用RowTouched来显示这样的细节控制器:
public override void ViewDidAppear (bool animated) {
base.ViewDidAppear (animated);
SearchHotel ();
var source = new HotelTableSource(data.ToArray());
var detail = Storyboard.InstantiateViewController("HotelDetailScreen") as iPhoneHotelDetailViewController;
source.RowTouched += (sender, e) => {
this.NavigationController.PushViewController(detail, true);
};
HotelSearchTable.Source = source;
}
但我需要传递表格上的项目信息以显示详细信息。我真的不知道该怎么办?
注意:我不能使用PrepareForSegue,因为我在控制器之间没有segue。
提前致谢
答案 0 :(得分:0)
如果您愿意,可以暂停UINavigationController 从您的行选定事件中,在表数据源内。
从那里你可以推送你的新ViewController。
“Row_Selected”中的UINavigationController navcontroller =(UINavigationController)UIApplication.SharedApplication.Windows[0].RootViewController;
答案 1 :(得分:0)
将数据传递给事件处理程序很简单,就是EventArgs参数的用途。
创建一个继承自EventArgs的类,并具有所需数据的属性:
public class HotelSelectedEventARgs : EventArgs
{
public DTOHotelInformation HotelInfo { get; set; }
}
然后,当您在RowSelected中调用处理程序时,不是传递空的EventArgs,而是创建自定义类的实例并将所选数据分配给HotelInfo属性。