2015-03-19 30 views
-2

我有一個帶有TableView和Button(Big Button)的UIView。 TableView有一個自定義單元格。在這個單元格中有一個「添加」按鈕。我想在用戶點擊添加按鈕時爲第一個按鈕設置動畫。Swift - 在其他類中訪問IBOutlet

這是我的架構:

enter image description here

這是我的代碼:

class ProductsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet var tableView: UITableView! 
    @IBOutlet var bigButton: UIButton! <- I WANT TO ANIMATE THAT BUTTON 

} 

ProductCell類我的應用程序的

class ProductCell: UITableViewCell { 

    @IBAction func addProduct(sender: AnyObject) { 
     //I WANT TO ACCESS THE BIG BUTTON FROM HERE 
    } 
} 

屏幕例如

enter image description here

我試圖讓父控制器或上海華獲得IBOutlet中,但應用程序崩潰八方通

+0

爲什麼downvotes?我是快速的小菜... – pekpon 2015-03-19 01:42:29

+2

爲什麼不在didSelectCell ...範例中使用NSNotification?或者一些自定義的代表團...在SO上有大量的樣本。斯威夫特有一個叫做財產觀察的東西(willSet,et al),但我認爲它不適用於你的情況。你可以嘗試使用UIDynamics或UIView動畫的手勢識別器(全部在SO上) – 2015-03-19 02:27:40

回答

0

添加塊屬性到你的細胞,它可以讓他們通知你的視圖控制器已經被點擊時,他們。在你的視圖控制器塊代碼中,你可以訪問大按鈕。

請參閱我對類似問題的回答。只需用您的按鈕替換開關示例。所以用UIButton替換UISwitch。

How can I get index path of cell on switch change event in section based table view

因此而不是讓細胞試圖跟另一個單元/按鈕,有小區通​​知管理員然後可以管理的大按鈕的變化。

0

儘管我對使用替代方法發表了評論,但您也可以根據對當前視圖控制器類中存儲的屬性的更新來使用以下策略。您也可以在ProductsViewController上使用屬性觀察,但我認爲您希望保持OOP集中並減少控制器的大小。

子類中的ViewController

人們可以繼承現有的UIViewController,然後創建超類,與已更改值有關係的屬性(行挖掘)。在那個子類中,你可以做一些動畫。因爲您將繼承子類,您將繼續獲得現有控制器中定義的所有優點和方法。在您的身份檢查器中,將您的類指向新的子類,並使用動畫爲您的UI創建任何功能更新。

class ProductsViewController:... { 
    var inheritedProperty:UIView = targetView { 
     willSet {newValue } // is the newValue 
     didSet {oldValue} //is the old value 
    } 
} 

class AnimatedProductsViewController:ProductsViewController { 

    override var inheritedProperty:UIView { 
     //do something interesting if the property of super class changed 
     willSet {newValue } // is the newValue 
     didSet {oldValue} //is the old value 
     //you might want to call this method like so 
     // didSet { animate(newValue) } 
    } 

    func animate (view: UIView){ 

     //do animation routine using UIView animation, UIDynamics, etc. 

    } 
} 

地產觀察

每當didSelectCell ...方法被稱爲只是設置一個值inheritedProperty。然後添加屬性觀察器(請參閱示例代碼),並在屬性更改時作出反應(可能會將引用傳遞給要設置動畫的視圖)。

例如:在屬性觀察者中,您可以將該視圖傳遞給您的動畫器函數(無論將要做什麼動畫)。有很多關於如何動畫視圖的例子,所以只需搜索(UIView動畫,UIDynamics等)。

分離的正常好處是功能封裝和重用,但Swift也保證每組屬性觀察者都會獨立觸發。在這個用例中,你必須對它的適用性給予更多的考慮。

0

不要在你的viewController

添加目標的方法這一切事情細胞在cellForRowAtIndexPath方法 添加按鈕,像這樣

cell.add.addTarget(self, action: "addProduct:", forControlEvents: UIControlEvents.TouchUpInside) 

定義方法

func addProduct(button:UIButton) 
{ 
// do button animation here 
}