2010-02-22 16 views
6
değerini temizler

Bir textField bir tablo içindeViewCell var. Kısa bir süre önce textBox'ta bir değer girersem ve sonra hücreyi ekrandan kaydırırsam, metin kutusundaki değerin kaybolduğunu fark ettim.iPhone - textField bir tablodaViewCell - Ekranı kaydırma

Buna karşı bir güvenceye sahibim. Mevcut bir UIKeyboard yoksa, tableView hücrenin yeniden çizilmesi için yeterince kaydırılamaz. Bununla birlikte, bazı kullanıcılar klavyeyi bitirmek için klavyede biti tuşunu kullanmazlar ve bunun yerine, tabloyu kaydırıp, programı bozarlar.

textField dizesini hemen bir değişkene depolamanın bir yolu var mı, yoksa tabloyu kaydırma yapmaktan koruyor mu, yoksa kullanıcı tabloyu kaydırmaya çalıştığında klavyeyi yok sayıyorViewView?

Bu görünüm için bir NIB dosyası yok, programa ait bir tabloViewController, yani StackOverflow hakkındaki diğer sorularda önerildiği gibi, Görünmez özel düğmelerle Interface Builder'da hiçbir şey yapamam.

cevap

5

HücreForRowAtIndexPath :: yönteminizin içindeki metin alanını mı başlatıyorsunuz? Eğer öyleyse, hücre her zaman görüntülendiğinde yeniden örneklenebilir.

Sen Kumandanızda metin alanına bir başvuru kaydetmek ve cellForRowAtIndexPath ::

+0

Metin Çerçevesini Bölüm 0, Satır 2'ye eklemek için bir durum deyimi bloğu kullanıyorum. TextField, başlıkta bir işaretçi olarak bildirildiğinden, myTextField.text kullanarak özelliklere erişebilirim. Bu yardımcı olur mu? – Justin

+0

Tam olarak takip etmiyorum. CellForRowAtIndexPath yönteminizde, Bölüm 0, Satır 2'de olup olmadığınızı belirleyen bir vaka ifadeniz var mı ve eğer öyleyse, metin alanını ekler mi? Eğer öyleyse, [[UITextField alloc] init] 'ı nereye çağırıyorsunuz? Ayrıca, cellForRowAtIndexPath yönteminin içinde de bulunuyorsa, büyük olasılıkla satırın görünüme her kaydırıldığında metin alanını yeniden başlatabilirsiniz (ve cellForRowAtIndexPath çağrılır). Metin alanınızı loadView veya denetleyicinizin ana init yöntemiyle başlatmayı deneyin. – chrissr

0

Bu sorunun cevabı scrollview temsilci yöntemi willBeginDragging uygulamaktır bunu yeniden kullanmanız gerekir. UITableView, UIScrollView'den miras alır.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; 
     [textField resignFirstResponder]; 
} 

Bu kısa sürede tableView bu miras ile

kaydırma başlar başlamaz klavyeyi görevden, o dönemde, kaydırma gelen tableView tutmak da mümkündür. , NO scrollEnabled özelliğini ayarlayın a la

self.tableView.scrollEnabled = NO; 
0

Sen delegesi ayarı olmalıdır NSTextField sen kontrolöre oluşturulan ve metin alanına her zaman metin değişikliklerini bildirilir böylece daha sonra denetleyicisi textField:shouldChangeCharactersInRange:replacementString: uygulamak .

Metin değiştiğinde, değiştirilen metni denetleyicinizin bir özelliğinde depolar.

NSTextField'u cellForRowAtIndexPath içinde oluşturduğunuzda, bu özelliğin değerini ayarlayın.

Kakao ile, model verilerinizi görünümünüzden ayrı tutmanız gerektiğini unutmayın.

+0

Ancak textField yukarı kaydırıldığında ve değer silindiğinde ne olur. Örnek değişkeni de değerini kaybediyor mu? – Justin

+0

Hayır, temsilci textField çağrısı yaparken: shouldChangeCharactersInRange: replacementString UITableViewCell silindikten sonra geçerli olacak şekilde metin alanından dize bir örnek özelliğine kopyalamanız gerekir. –