2016-04-14 14 views
0
kullanarak çıkış uygulaması

Uygulamanın geri kalanı için geçerli olan bir Giriş sayfam var. Uygulamamın geri kalanında kalan görüntü denetleyicileri kendi tanımladığım 'BaseViewController' öğesinden genişler.NSTimer

Aşağıdaki soru yaşıyorum?

import UIKit 

class BsgBaseViewController: UIViewController { 
var nsTimerObj: NSTimer! 
func resetTimer(addTimeToTimeOutThread: NSTimeInterval){ 
    nsTimerObj?.invalidate() 

    let nsTimerObjTemp = NSTimer.scheduledTimerWithTimeInterval(10.0, target: self, selector: "handleIdleEvent:", userInfo: nil, repeats: false) 
    nsTimerObj = nsTimerObjTemp 

} 


func handleIdleEvent(timer: NSTimer) { 

     let createAccountErrorAlert: UIAlertView = UIAlertView() 
     createAccountErrorAlert.delegate = self 
     createAccountErrorAlert.title = ("Title") 
     createAccountErrorAlert.message = "Due to the security policies your session has been timed out. We have to log you out." 
     createAccountErrorAlert.addButtonWithTitle("OK") 
     createAccountErrorAlert.show() 

} 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("user touched") 
    self.resetTimer(HardCodedValues().hardCodedTimeOutApplication) 
} 

override func viewDidAppear(animated: Bool) { 
    self.resetTimer(HardCodedValues().hardCodedTimeOutApplication) 
    print("appear") 
} 

override func viewWillDisappear(animated: Bool) { 
    self.resetTimer(HardCodedValues().hardCodedTimeOutApplication) 
    print("disappear") 
} 

} 
  1. UITextField veya UITextView tıklandığında ateş almaz touchesBegan() yöntemi.

  2. İki kapılı ve iki UIViewController numaralı UISegmentedControl numaralı UIViewController numaralı bir Ayarlar var. Tüm bu üç UIViewController, benim BaseViewController'umdan türemiştir. Diğer iki UIViewController'u tıklattığımda, kaçınmak istediğim üç tane BaseViewController örneğini oluştur.

+0

# 2 Noktası: Gördüğünüz şey, yalnızca türetilmiş nesnelerin nasıl çalıştığıdır. Bir alt sınıf, ana sınıfının bir uygulamasıdır ... artı bazı şeyler. –

+0

@Phillip Mills, elde etmek istediklerim, belirli bir süre sonra uygulamamı kapat. – Cloy

+0

Bu iyi. Demek istediğim, zamanlayıcı mantığını, birden fazla çocuğa sahip bir temel sınıfa yerleştirmeniz, yalnızca uygulama için bir kronometre istediğinizde mantıklı değildir. Yapının detayları ve nasıl sıfırlandığı, yapının ihtiyacınız olanla eşleşmesine kadar gerçekten önemli değildir. Phillip Mills @ –

cevap

1

akla gelen ilk fikir bir InactivityMonitor sınıf icat ve uygulama temsilci bunun bir örneğini oluşturmak sahip olmaktır. Zamanlayıcıya sahip olsun ve bir çeşit "yenileme" bildirimini dinleyelim. Görünüm denetleyicileri, bu bildirimleri, zamanlayıcıyı sıfırlayabilmesi için gönderdiklerinde gönderebilirler.

Muhtemelen denetleyicilerinizin metin alanları ve görünümler için de temsilci olmaları gerekir, böylece bu tür etkinliklere de bildirim gönderebilirler. Aslında, en zor kısım, sahip olduğunuz UI öğelerinin türüne bağlı olarak dikkat edilmesi gereken tüm kullanıcı etkinliklerini tanımlayabilir.

Düşünmek istediğim diğer bir şey, kurallarınızın arka plan/ön plan uygulama olaylarında nasıl uygulanacağıdır.

+0

.......... Ben App Delegesi zamanlayıcıyı eklendi ve çok sekmeler için iyi çalışıyor zamanlayıcı var ................ size @Phillip Mills ederiz ..... Şimdi UIViewController'ımın her birinde, kullanıcının ekranla etkileşimde olduğunu bilmenin basit bir yolu var ................................... .... bu yöntem ancak sadece herhangi bir olay yakalamak ve o sayacı sıfırlamak gerekip gerekmediğini karar verebilir Objective-C ise – Cloy

+1

......... boş ekranın bir bölümünü algılar. Swift'de, kullanıcı eylemlerini tek tek kesmek ve her biri için sıfırlamayı tetiklemek zorunda kalabilirsiniz. 'UIApplication'' in: rağmen, sendEvent 'belgelerine bakın "Eğer bunu gerektirir * Eğer UIApplication sınıflara ve bu yöntemi geçersiz kılarak gelen olayları müdahale edebilir *." –

İlgili konular