Bir Viewdeki text'in diğer viewdeki text'e eşit olmasını istiyorum. Aslında çok basit bir şey istiyorum ama dakikalardır nerede hata yaptığımı bulamadım ve sonunda sormaya karar verdim.

Kodlarım şöyle;

- (IBAction)donebutton:(id)sender {
    AddTaskViewController *addtask = [[AddTaskViewController alloc]initWithNibName:@"AddTask" bundle:nil];
    addtask.testlabel.text = self.zaman1.text;
    [self dismissViewControllerAnimated:YES completion:nil];

}

Button'a tıklayında AddTaskViewController daki testlabel'ın değerini ayarlamak istiyorum. Ancak hiçbir işe yaramıyor.

soruldu: 23 Nis '13, 18:32

Salieh's gravatar image

Salieh
2081014
cevap kabul oranı: 0%

1

1- Addtask icerisinde testlabel'i synthesize ettinmi 2- addtask icersinde labelin nib uzerindeki baglantilarini interfacr biilder da yaptin mi?

(23 Nis '13, 21:58) dreampowder dreampowder's gravatar image

Evet onlar yapılmış durumda. En son belki labeldandır diyip NSString yarratıp denedim yine olmadı.

(24 Nis '13, 08:03) Salieh Salieh's gravatar image

Ben hala çözebilmiş değilim. Fikri olan hiç mi kimse yok?

(26 Nis '13, 09:41) Salieh Salieh's gravatar image

Anlamadığım bir konu var, yukarıdaki kodda, addTask view'ını oluşturmuşsunuz tamam, fakat oluşturup setlediğiniz addTask view'ını hiç kullanmamışsınız? :)

mevcut view'ı dismiss ettiğinizde eğer addTask view'ına dönüyorsanız yine de yanlış bir kullanım söz konusu..

sizin addTask oluşturduktan sonsa:

[self presentModalViewController:addTask] tarzı bir işlem yapmanız gerekiyorki o setlediğiniz addTask ekranı gözüksün..


Bunun birçok farklı yolu var, bunlardan birisi de "observer pattern" metodunu kullanmaktır. Bu yöntemde veriyi alacak view için bir "observer" oluşturuyoruz, yani view memory de olduğu sürece olası mesajlaruı dinleyeceği bir servis oluşturuyoruz. veriyi alacak olan view'ın viewdidload kısmına aşağıdaki komutu giriyoruz:

 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(receiveNotification:) name:@"tasklistener" object:nil];

yukarıdaki metodu özetlemek gerelirse, tasklitener isimli bir observer oluşturduk ve bu observer bir mesaj aldığında "receivenotification" isimli metodu çaılştırmasını söyledik. aynı view'ın içerisinde bu metodu da oluşturuyoruz:

- (void) receiveNotification:(NSNotification
*)notification{
    NSString* taskTest= [notification.userInfo objectForKey:@"TaskMessage"];
   self.testlabel.text = taskTest;
     }

şimdi de veriyi gönderecek olan view içerisinde buttona tıkladığımızda yapılacak metodun içine aşağıdaki kodu ekliyoruz:

NSMutableDictionary* dict = [[NSMutableDictionary alloc]init];
    [dict setObject:self.zaman1.text forKey:@"TaskMessage"];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"tasklistener" object:self userInfo:dict];

temel olarak, veriyi gönderen view localnotification center'a içerisinde ilgili mesajın olduğu "userinfo" dictionary sini gönderdi, bu dictionary'e istediğiniz şekilde key/value binding yapabilirsiniz.. karşı tarafta ise notification geldiği anda trigger olur.

Yanlız burada dikkat etmeniz gereken durum, veriyi alacak olan kısımda (receivenotification metodu), benim yazdığım kodda olmasa da hangi notification adıyla geldiğini kontrol etmeniz. şu anda aklımdan yazıyorum yanlış olabilir ama receivenotification metodunun içerisindeki komutu şu şekilde bir if bloğu içine almanız şiddetle tavsiye edilir:

if([notification.name isEqualToString:@"tasklistener"]){
... //notification alındıktan sonra yapılacaklar
}

Bunu yapmamızın nedeni receivenotification metodu, hangi viewın hangi isimle gönderdiğine bakmaksızın çalışıyor olmasıdır, eğer başka bir yerde daha notification kullanırsanız uygulamanızda hata alma olasılığınız yüksek.

permanent link

cevaplandı: 08 May '13, 16:33

dreampowder's gravatar image

dreampowder
3.3k112849
cevap kabul oranı: 23%

değiştirildi: 10 May '13, 15:24

Ben segue işlemi ile view geçişini sağlıyorum. Ve bir seçeneği başka viewden değiştirilmesini sağlıyorum. Sadece yapmak istediğim bu ancak data paslaşması yapmak için sanırım protocol oluşturmam gerekiyormuş dissmissview kullanabilmek için. Ancak protocol işini bir türlü beceremedim.

(10 May '13, 13:56) Salieh Salieh's gravatar image

@Salieh cevabı ekledim.

(10 May '13, 15:24) dreampowder dreampowder's gravatar image
1

@Salieh sora sora application'u bitireceksin az kaldı :)

(11 May '13, 05:29) dreampowder dreampowder's gravatar image

Galiba öyle.. :)

Geç doğruladığım için özür dilerim sınav yüzünden bir süre kodlamaya ara vermek zorunda kalmıştım. :)

(24 Haz '13, 10:12) Salieh Salieh's gravatar image

konuya bir farkli cevapta ben ekleyim. Ben viewController olusturuldugu esnada degiskenlere atiyorum.. Soyle ornekleyim. 1. sayfadan 2. sayfayi acmaya calisiyoruz. Oncelikle 2. sayfada, ilk sayfadan alacagimiz degiskenleri olusturuyoruz.

@property (assign) NSString *avatarim,*nickim;   //NSString olarak aldim.

Sonrasinda 1. sayfada, ikinci sayfayi cagirdigimiz yere geliyoruz *bu bende button oluyor

ViewControllerMain *svc =[self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerMain"];
/* Stroyboardda 2.sayfanin identifier viewControllerMain olarak tanimli */
    svc.nickim = [self.textNickName text]; // Acilacak formdaki degisken1
    svc.avatarim = tip;   // Acilacak formdaki degisken2
  //   .......  svc. istedigimiz kadar ekleyebiliriz. //
    [svc setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
    [self presentViewController:svc animated:YES completion:nil];

Storyboard kisminda herhangi bir baglanti yapmiyorum. Yani 1. sayfadaki buttona IBAction ekleyip onun icerisine ustteki kodu yaziyorum.

Son olarak; 2. sayfada bu gelen degerleri kullaniyorum. Genelde - (void)viewDidLoad kisminda kullaniyorum. Ama bu degiskenler durdugu icin viewDidLoad kismindan baska yerde de kullanabilirim.

 - (void)viewDidLoad{
 [self.textBoxNick setText:[self nickim]];
 NSLog("%@",[self avatarim]);
}
permanent link

cevaplandı: 21 May '14, 05:27

Antiokhos's gravatar image

Antiokhos
8365815
cevap kabul oranı: 17%

Evet bu 1. sayfadan 2. sayfaya geçişlerde mantıklı bir işlem, fakat 2. sayfadan 1. sayfaya geçiş yaptığınızda o bilgiyi nasıl geri getirirsiniz? sonuçta view dismiss olurken propertyler de release ediliyor.. :) Bunun iki yolu var, 1: Oberserverlar, 2:delegate methodlar.. Observer kimi durumlarda pratik olmayabiliyor, veya delegate yöntemi ile daha izole bir haberleşme sağlayabilirsiniz..

(21 May '14, 17:24) dreampowder dreampowder's gravatar image

delegate methoduna da bir ornek yazalim... Zamaninda bende bu konuda cok tikanmistim..:D Turkce kaynak bulamamistim. Ihtiyac duyanlar icin boyle bir kaynak sunalim:D

(22 May '14, 05:28) Antiokhos Antiokhos's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×45
×16
×12

Soruldu: 23 Nis '13, 18:32

Görüntüleme: 1,267 kez

Son güncelleme: 22 May '14, 05:28

powered by BitNami OSQA