我以編程方式向超級視圖添加UIView,並且我想向UIView添加一個目標以便能夠在觸摸上執行任何操作。爲了添加一個目標,我需要將UIView的自定義類設置爲UIControl。通常情況下,在IB中完成,但因爲即時通訊編程,我不能這樣設置它。我試圖設置這樣的UIControl,但它不工作。以編程方式設置UIView的自定義類?
subView.class = UIControl;
這樣做的正確方法是什麼?
我以編程方式向超級視圖添加UIView,並且我想向UIView添加一個目標以便能夠在觸摸上執行任何操作。爲了添加一個目標,我需要將UIView的自定義類設置爲UIControl。通常情況下,在IB中完成,但因爲即時通訊編程,我不能這樣設置它。我試圖設置這樣的UIControl,但它不工作。以編程方式設置UIView的自定義類?
subView.class = UIControl;
這樣做的正確方法是什麼?
UIView的一個實例沒有目標。如果您需要目標/操作機制,請創建UIControl實例。否則,請在您的視圖上使用gesture recognizer。
你有兩個選擇:
UIControl
這是一個UIView
子類,這個類有一個觀點相同的行爲,但你可以使用 選擇addTarget:action:forControlEvents:
控制其活動, 或...UIGestureRecognizer
來控制與您的 視圖的交互。你有時候在IB中設置一個UIView的類到MyView中的原因是你想創建一個MyView,但是IB在它的庫中沒有MyView,所以你不能拖一個到你的視圖。所以,你拖入一個UIView,並將其類改爲MyView。
當你在代碼中實例化一個對象而不是從.xib加載它時,根本沒有必要。在代碼中,你知道你想要什麼實例類,所以你只要實例化類:
MyView *subview = [[MyView alloc] initWithFrame:someFrame];
如果你想子視圖是一個UIButton,你實例化,而不是:
UIButton *subview = [UIButton buttonWithType:UIButtonTypeRoundedRect];
不要弄亂了isa-swizzling,至少不是現在。如果你問這個問題(並且問這個問題沒什麼問題),你應該把它作爲一種黑暗的藝術來對待,你可能會在將來的某個時候獲得。