Pergunta

Alguém poderia explicar o significado de someViewController.delegate = self e self.delegate?Onde é que eles nos ajudar?

Foi útil?

Solução

Delegados enviar mensagens para você.

Por exemplo:se você usa o acelerômetro do delegado, você receberá mensagens sobre o acelerômetro.

Se você usar essa nova neutrino-detecção de delegado, você receberá mensagens sobre os neutrinos detectados na área.

Se você usar pop-Ups, pop-Ups enviar-lhe mensagens.E a maneira que é feito, é com o PopUp do delegado.Há muitos, muitos exemplos.

Assim, os delegados de enviar mensagens.

É simples assim.

Você pode perguntar, "ONDE é que enviar estas mensagens?"

A resposta é esta:ele envia as mensagens para onde você definir ".delegado" coisinha.

Quando você "definir o delegado," o que você está fazendo é dizer onde você deseja que as mensagens de ir.

Portanto,

blá.delegar = amazingPlace irá enviar as mensagens para "amazingPlace".

blá.delegar = somewhereElse irá enviar as mensagens para "somewhereElse".

blá.delegar = auto irá enviar as mensagens ...... para você.

Muitas vezes, você deseja que as mensagens de vir para "você", então você acabou de dizer "blá.delegar = auto"

É um erro muito comum esquecer-se de que a linha de código.

Se você esquecer essa linha de código, são de pelúcia.As mensagens de ir nada, e você está coçando a cabeça tentando descobrir o que deu errado.

Outra coisa que você tem a fazer:quando você usar um delegado, você tem que anunciar de antemão, que, você quer usar o delegado.

Como fazer isso?

Nos velhos tempos, com o objective-c, você só fiz isso...

@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate,
                                        UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>

Você pode ver que 'BigTop' quer usar dois delegados, a saber, a ASIHTTPRequestDelegate e o UIPopoverControllerDelegate.Considerando que 'Voando' só quer usar um delegado - quer usar o acelerômetro.

Em Swift, ele não poderia ser mais fácil - você só tem uma vírgula, em seguida, os protocolos:

 class YourClass:UIViewController, SomeDelegate, AnotherDelegate

Você não pode fazer muito no iPhone sem o uso de representantes em todo o lugar.

Os delegados são usados em todos os lugares e em todo tempo no iOS.

É perfeitamente normal que uma classe pode usar uma dúzia de delegados.

No exemplo de "Voar" acima, em algum lugar no código para "Voar", ele tem a dizer ...

[[UIAccelerometer sharedAccelerometer] setDelegate:self];

No caso de BigTop, seria necessário definir o delegado em algum lugar para o ASIHttpRequests,

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];

(Não se esqueça de nos velhos tempos, com o objective-c, x.delegate=self foi exatamente o mesmo que [x setDelegate:self].)

Hoje em dia com o Swift você simplesmente digite

  x.delegate = self

e isso é tudo que existe para ela.

Então o que você está fazendo.Delegados enviar mensagens.Você tem a dizer onde você deseja que as mensagens de ir.Tipicamente, você quer ir para "você", então nesse caso você simplesmente dizer x.delegate=self.

Espero que ajude.

Outras dicas

Delegate é utilizado para transmitir/comunicação de dados/mensagem de b/w dois objetos de classes.Aqui, tableView(Emissor) envia dados/mensagem viewController(Receptor).Considere o exemplo de implementação UITableView na personalizado viewController Aqui, UITableViewDataSource & UITableViewDelegate são, na verdade, protocolos.Infelizmente, UIKit Framework não é open source.Mas eu garanto isso o que acontece internamente depois de se referir a vários artigos.

O protocolo é como treinador de basquete com alguns requisitos nele.Ele/Ela diz jogadores como class, struct, enum what to do? usando esses requisitos.Mas Ele/Ela doesn't knows how to do?por eles mesmos.Assim, a classe ou estrutura que conforma-se que o protocolo deve garantir a implementação para aqueles requisitos, obtendo para enterrar a bola.

protocol UITableViewDelegate {
 func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
}

Um Protocolo é dito ser de origem de dados de protocolo, em seguida, ele sempre contém funções necessárias com o "tipo de retorno", conforme mostrado abaixo.

protocol UITableViewDataSource {
 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
 func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
}

A implementação de UITableView dentro personalizado viewController

class viewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    let tableView = UITableView()    

    override func viewDidLoad {
      tableView.delegate = self
      tableView.dataSource = self
    }

Aqui, tableView atua como Delegante(remetente) & viewController object i.e (self) como Delegado(receptor).

A fim de obter UITableView no viewController.Ele deve conformar-se a ambos os Protocolos.

Assim, viewController objecto de classe tem implementado todos aqueles necessários funções de ambos os protocolos.Agora self pode ser usado como UITableViewDelegate digite ou UITableViewDataSource digite porque Protocolo pode ser utilizado como tipo para um objeto da classe que está de acordo com ele.Agora, ambas as propriedades de tableView eu.e delegate & dataSource são atribuídos a self porque ter mesmo respectivos tipos de protocolo.

O não-opcional funções de ambos os Protocolos são implementados em viewController objecto de classe como abaixo

Protocolo UITableViewDelegate funções

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
// Do further processes like pushing or poping another viewController
}

Protocolo UITableViewDataSource funções

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
 }

func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    return UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Cell")
 }

1) Quando o usuário seleciona uma linha em uma seção, em seguida, tableview(Remetente) que eu.e UItableView() chama o UITableViewDelegate func mostrado abaixo, passando de dados para os parâmetros de tableView & indexPath que reside no viewController objeto(Receptor), através de sua delegate propriedade.Agora viewController utiliza os dados passados para outros processos como empurrar ou poping a nova personalizado viewController.

tableView.delegate?.tableView(UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

2) Funções dentro UITableViewDatasource protocolo fornece dados personalizados para tableview(Remetente).O tableview pede a viewController objeto chamando de origem de dados funções com passagem de dados para os parâmetros de tableView & indexPath que reside no viewController objeto(Receptor), através de sua datasource propriedade.Agora viewController usa aqueles passados de dados e retorna dados personalizados de volta tableview.Agora tableview usa esses dados para criar "10" células em uma seção & espécie de "célula" em indexpath

tableView.dataSource?.tableView(UITableView, numberOfRowsInSection section: Int) -> returns "10"

tableView.dataSource?.tableView(UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> returns "cell"

Finalmente, toda a UIKit Framework usa delegado & origem de dados, padrões de projeto em todas as suas classes, tais como UIApplication, UITableView, UICollectionView, UITextField e assim por diante para a comunicação de dados.Infelizmente, UIKit Framework não é open source.

Se, em qualquer caso, a resposta de Bourne não ajuda. Um delegado é basicamente a reação de um evento em um objeto e dizendo ".Delegate = eu" significa que esses protocolos foram adotados em si ... por exemplo. O que acontece quando quando Uma linha é selecionada no TableView é contada pelo método de delegado da tabela "DidSelectrowatIndexpath" ... e se um ViewController tiver uma tabela de tabela .. e "DidSelectrowatIndexpath" é definido nesse viewcontroller que diremos apenas ... TabelaView.Delegate = Self " ... e "self.anningthing" é usado para dizer que "qualquer coisa" é uma propriedade de si .. para por exemplo, nsstring* qualquer coisa; @property (não atômica, reter) nsstring* qualquer coisa;

então "self.anningthing"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top