2013-10-18 57 views
0

我有一個視圖控制器有一個UITableView與一些自定義單元格。
傳遞一個自定義單元格圖像視圖圖像到一個新的視圖控制器

在自定義單元格內,我有一個主要的UIImageView。我在圖像視圖中添加輕擊手勢識別器,以便在輕敲圖像時調用handleImageTap方法。

問題
我所試圖做的是通過從選定UIImageView圖像(來自特定小區)到一個新的視圖控制器。

當handleImageTap叫我運行以下命令:

UIImageView *imageView = (UIImageView *)gestureRecognizer.view; 

// send the image instead of self when firing the segue 
[self performSegueWithIdentifier:@"remindMeTurnInfo" sender:imageView]; 

然後我必須在prepareForSegue方法如下:

if ([segue.identifier isEqualToString:@"remindMeTurnInfo"]) { 
     UIImageView *imgView = (UIImageView *)sender; 
     MESPlayedTurnReminderViewController *VC = segue.destinationViewController; 
     VC.mainImageView.image = imgView.image; 
} 

以上不起作用圖像不跨過去了。我如何從選定的單元格圖像視圖獲取圖像到新的控制器?

另外
有時,當該單元的圖像視圖中選擇的didSelectRowAtIndexPath方法被調用。這是不正確的,並且當圖像視圖被點擊時不應該被調用。這似乎並不是所有的時間,無論如何,以確保這不被稱爲?

我還需要參考imageview在prepareForSegue方法中的單元格。當單元格(不應該)在這裏實際選擇時,如何獲得imageview所在單元格的引用。

回答

0

我改變了方法。

UIImage放在目標控制器上。然後在這個控制器的viewDidLoad中,我將圖像傳入UIImageView。我想這是因爲圖像視圖還沒有創建。

1

您的問題有2個問題。

首先,您不應該使用表格視圖單元格來存儲數據。表格視圖單元格是視圖對象。他們顯示數據。當用戶在單元格上觸發某個動作時,應該找出單元格的indexPath,使用該信息查找模型中的數據(所選行或部分/行的圖像,在您的情況下)並使用該信息。

其次,你不應該試圖操縱另一個視圖控制器的視圖。將其他VC的觀點視爲私密。這是一個大問題。觸及另一個VC並觸及它的視圖違反了兩個VC的封裝,並且意味着觸摸的VC取決於「觸摸的」VC的外觀。壞。那麼你不能改變所觸及的VC的外觀而不破壞其他代碼。它也不能在創建新的VC之後正常工作,因爲它的視圖還不存在。

相反,您應該添加一個「imageToUse」屬性到另一個視圖控制器,並在prepareForSegue方法中設置THAT。然後第二個視圖控制器可以獲取圖像並將其安裝在它的viewWillAppear方法的圖像視圖中。

+0

感謝你們,我已經知道我需要傳遞一個UIImage,而不是直接嘗試更新image views image prop。你的第一部分意味着什麼,你不應該使用表格視圖單元來存儲數據。我在哪裏提到我是?單元格有一個UIImageView和一個圖像,我只是將該特定圖像傳遞給另一個控制器。 – StuartM

相關問題