2017-01-19 3 views
1

Я получил этот пример с веб-сайта Xamarin ... по какой-то причине, это не работает ...Добавить контакт в UIView - Xamarin

private UIView buildPage(Page p) { 
    var v = new UIView(); 
    v.UserInteractionEnabled = true; 
    var img = UIImage.FromFile("pages/" +p.filename + ".png"); 
    UIImageView imgView = new UIImageView(new CoreGraphics.CGRect(0, 0, vpWidth, vpHeight)); 
    imgView.Image = img; 
    imgView.ContentMode = UIViewContentMode.ScaleAspectFit; 
    v.Add(imgView); 
    for (int e = 0; e < p.elements.Count; e++) { 
     if (p.elements[e].type == "pageReplace") { 
      UIImageView link = new UIImageView(new CoreGraphics.CGRect(p.elements[e].left, p.elements[e].top, p.elements[e].width, p.elements[e].height)); 
      if (debug) { 
       link.BackgroundColor = UIColor.Green; 
       link.Alpha = 0.5f; 
      } 
      link.UserInteractionEnabled = true; 
      UITapGestureRecognizer tapGesture = new UITapGestureRecognizer(tst); 
      link.AddGestureRecognizer(tapGesture); 
      v.Add(link); 
     } 
    } 
    return v; 
} 
public void tst() { 
    Console.WriteLine("dswwwww"); 
} 

Что может быть не так? Эта функция может поместить ссылку с именем по названию (в зеленом цвете), но когда я нажимаю на нее ... ничего не происходит.

enter image description here

ответ

1

Я вижу несколько проблем:

  1. вы не добавляете первый взгляд вы создаете, v, любому надтаблицы, поэтому он не будет на экране.
  2. Вы не установили позицию/размер для первого вида, v.

Так пытается ваш код, указанный выше в новом проекте Xam.iOS и добавления кода в ViewDidLoad метода ViewController «s с указанными выше проблем, исправленных, следующие работали, как и ожидалось:

UIView v = new UIView(new CoreGraphics.CGRect(20, 20, View.Frame.Width-40, View.Frame.Height-40)); // Give the first view a position/size 

v.BackgroundColor = UIColor.Gray; // Make it easy to see 

UIView link = new UIView(new CoreGraphics.CGRect(100, 100, 100, 100)); 

//link.UserInteractionEnabled = true; // Not needed. 

link.BackgroundColor = UIColor.Green; // Make it easy to see what to click on 

UITapGestureRecognizer tapGesture = new UITapGestureRecognizer(tst); 

link.AddGestureRecognizer(tapGesture); 

v.Add(link); 

View.Add(v); // View is the main view of the ViewController by default.  

Щелкнув на зеленом поле запускает метод tst(), как и ожидалось. Однако нет никакой необходимости для v зрения здесь, так что следующий будет работать нормально, а также:

UIView link = new UIView(new CoreGraphics.CGRect(100, 100, 100, 100)); 

link.BackgroundColor = UIColor.Green; 

UITapGestureRecognizer tapGesture = new UITapGestureRecognizer(tst); 

link.AddGestureRecognizer(tapGesture); 

View.Add(link); 

У вас есть ссылка на документ, что код пришел? Мне любопытно видеть контекст и как они ушли, не добавляя вид v к иерархии. Кроме того, поскольку я инженер поддержки Xamarin, если в документах есть ошибка, я бы хотел их устранить.

+0

Это потому, что я просто поместил часть кода, которая могла бы быть актуальной ... Но я только что отредактировал ее и поместил все сейчас. Я добавляю к супер-представлению. Проверьте код и результат. Это в основном функция, которая возвращает UIView. ты! –

+0

Страница p = getPage (s); \t \t \t UIView st = buildPage (p); \t \t \t mainContainer.Subviews [curPage] .AddSubview (st); \t \t \t this.View.Add (mainContainer); –

+0

Я думаю, у У все есть сейчас :) Спасибо за внимание. Я действительно изучаю Хамарин. Я пришел из Appcelerator. –

0

Вы создаете виджет или расширение яблочного чата? Console.WriteLine() не будет работать на них.

+0

Это просто приложение для iPad. Раньше я использовал Console.Writeline во многих случаях. –

Смежные вопросы