UITableView
サブクラス化されたクラスがありUITableViewSource
ます:
table = new UITableView(window.Bounds);
table.Source = new CellSource();
public class CellSource : UITableViewSource
{
// etc etc
選択した行を取得しようとしているのでRowSelected
、ソース クラスにメソッドを実装しました。
public override void RowSelected(UITableView tableview, NSIndexPath indexpath) {
Console.WriteLine("User tapped");
}
ただし、セルをタップしても、コンソールに書き込もうとしてもまったく反応しません。
それが役立つ場合は、完全なクラスを投稿できますか?
ありがとう。
編集
だから、私が作成した後UITableView
:
table = new UITableView(window.Bounds);
table.AutoresizingMask = UIViewAutoresizing.All;
table.SeparatorStyle = UITableViewCellSeparatorStyle.None;
table.BackgroundColor = UIColor.Clear;
table.Source = new CellSource();
ソース クラスを使用して XML ファイルを解析し、リストを作成します。
List<Treasure> treasures = new List<Treasure>();
protected class Treasure {
public string cellTitle { get; set; }
public string cellTag { get; set; }
public string cellImage { get; set; }
public string audioFile { get; set; }
public string mainTitle { get; set; }
public string mainTag { get; set; }
public string mainBody { get; set; }
public string mainImage { get; set; }
public string mainCaption { get; set; }
}
public CellSource (/*string[] items*/)
{
Console.WriteLine("CellSource called");
string fileName = "treasuresiPhone.xml";
XDocument doc = XDocument.Load(fileName);
treasures = doc.Descendants("treasures").FirstOrDefault().Descendants("treasure").Select(p=> new Treasure() {
cellTitle = p.Element("celltitle").Value,
cellTag = p.Element("celltagline").Value,
cellImage = p.Element("cellimage").Value
}).ToList();
numCells = treasures.Count();
}
次に、別のクラスで を作成しCGBitmapContext
、画像を返し、これをセル画像として設定します。
public UIImage DrawCell (string cellImage) {
string cellI = cellImage;
//create a new graphics context
int width = 320;
int height = 110;
CGBitmapContext ctx = new CGBitmapContext(IntPtr.Zero, width, height, 8, 4*width, CGColorSpace.CreateDeviceRGB(), CGImageAlphaInfo.PremultipliedFirst);
//load an image
var imagePath = (@cellI);
var image = UIImage.FromFile(imagePath).CGImage;
ctx.DrawImage(new RectangleF(0, 0, width, height), image);
UIImage returnedImage = new UIImage();
returnedImage = FromImage(ctx.ToImage());
return returnedImage;
}
ラベルのような他のテスト用のものを追加し、RowSelected
メソッドをオーバーライドします。
public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) {
UITableViewCell cell = tableView.DequeueReusableCell (cellIdentifier);
cell = new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier);
cell.UserInteractionEnabled = false;
UILabel secondViewLabel = new UILabel();
//if there are no cells create a new one
if (cell == null) {
Console.WriteLine("cell == null");
} else {
//create a new cellobject - this grabs the image and returns a CGBitmapContext
CellObject _cellObject = new CellObject();
cell.ImageView.Image = _cellObject.DrawCell(treasures[indexPath.Row].cellImage);
//add text
secondViewLabel.Tag = 1;
secondViewLabel.Text = treasures[indexPath.Row].cellTitle;
secondViewLabel.TextColor = UIColor.White;
secondViewLabel.TextAlignment = UITextAlignment.Center;
secondViewLabel.Lines = 0;
secondViewLabel.LineBreakMode = UILineBreakMode.WordWrap;
secondViewLabel.Font = UIFont.FromName("Helvetica", 16);
secondViewLabel.BackgroundColor = UIColor.FromRGB(205, 54, 51);
//get the width of the text
SizeF labelSize = secondViewLabel.StringSize(secondViewLabel.Text, secondViewLabel.Font);
secondViewLabel.Frame = new RectangleF(0, 110 - (labelSize.Height + 10), labelSize.Width + 20, labelSize.Height + 10);
//add a second view
UIView secondView = new UIView();
secondView.AddSubview(secondViewLabel);
cell.ContentView.AddSubview(secondView);
}
return cell;
}
public override void RowSelected(UITableView tableview, NSIndexPath indexpath) {
Console.WriteLine("User tapped");
}