2011-07-24 42 views
1

我正在Xcode for iOS中編寫Objective-C++。我的項目主要是C++類和最高級別的一些Objective-C類。我的C++類包含Objective-C UI元素,我需要它們來接收UI事件。 UI元素是否可以直接調用C++成員函數?即有一個相當於這個呼籲C++函數:在C++類中接收UI事件

[control addTarget:object action:@selector(action:) forControlEvents:event];  

據我瞭解@selector不會幫助我在這裏。我需要另一種方法來使控制調用我的成員函數 - 是否存在?現在,我使用了一個Objective-C接收器類,它是我的C++類的成員,它接收UI事件,然後適當地調用我的C++類,但這看起來像是一種迂迴的實現方式。如果我所描述的是不可能的,是否有更好的方法來做我想做的事情?

+2

無法爲Apple內置的UIKit類提供函數指針。你將不得不做一些你已經在做的事情:讓一個Objective-C類接收事件並轉發它們。 –

回答

0

我認爲你已經發現了最簡單的解決方案。您可以通過在C++基類中實現Obj-C/C++橋接來進一步封裝此功能,並從中派生任何業務邏輯類。

還有另一個選項,即在Objective-C運行級別執行此操作。讓你的C++類用objc_allocateClassPair()生成一個新的Objective-C類,在class_addMethod()等處添加一個方法來處理你的動作(請參閱Objective-C Runtime Reference)。我沒有看到明顯的原因,爲什麼你想要沿着這條路線走下去,但很好意識到這一點。

+0

好東西,謝謝你的信息。 – Luke