누구나 someViewController.delegate = self
과 self.delegate
의 의미를 설명 할 수 있습니까? 그들이 우리를 돕는 곳은 어디입니까?.delegate = self는 무엇을 의미합니까?
답변
대표자 메시지를에게 보냅니다.
예 : 가속도계 위임자를 사용하는 경우 가속도계에 대한 메시지가 표시됩니다.
새로운 중성미자 검출 대리인을 사용하면 해당 지역에서 발견 된 모든 중성미자에 대한 메시지를 받게됩니다.
PopUps를 사용하는 경우 PopUps에서 메시지를 보냅니다. 그리고 그 방법은 PopUp의 대표단과 함께합니다. 많은 예제가 있습니다.
따라서 대리인은 메시지를 보냅니다.
간단합니다.
"이 메시지를 보내는 위치는 무엇입니까?"
답변은 다음과 같습니다. ".delegate"를 설정 한 위치로 메시지를 보냅니다.
"위임자를 설정할 때"수행 할 작업은 메시지를 보낼 위치를 지정하는 것입니다. 따라서
,
blah.delegate = amazingPlace
는 메시지 "amazingPlace"을 보내드립니다.blah.delegate = somewhereElse는 "somewhereElse"에게 메시지를 보냅니다.
blah.delegate = 자기는 을에게 보낼 것입니다.
매우 자주, 당신은 메시지 당신은 단지 코드 줄을 잊어 "blah.delegate = 자기"
그것은 매우 일반적인 실수를 말하므로, "귀하"에게 가고 싶어.
코드 줄을 잊어 버리면 채워집니다. 메시지는 이 아니며으로 가고, 무엇이 잘못되었는지 알아 내려고 머리를 긁적니다.
다른해야 할 일 : 대리인을 사용할 때 위임자를 사용한다고 말해야합니다. 목표 - C와 함께 예전에는 그냥 ... 이렇게
@interface AppDelegate_Pad : NSObject <UIApplicationDelegate>
@interface BigTop : UIViewController <ASIHTTPRequestDelegate, UIPopoverControllerDelegate>
@interface Flying : UIViewController <UIAccelerometerDelegate>
당신은 'BigTop은'두 개의 대표, 즉 ASIHTTPRequestDelegate과 UIPopoverControllerDelegate을 사용하고자하는 것을 볼 수 있습니다. 'Flying'은 하나의 델리게이트 만 사용하려는 반면 가속도계를 사용하려고합니다.
스위프트에서는 쉬울 수 없습니다 - 당신은 단지 다음 프로토콜을 쉼표가 :
class YourClass:UIViewController, SomeDelegate, AnotherDelegate
당신은 정말 아이폰에 많은 것을 할 수 없어 사방에 대표단을 사용하지 않고.
참석자는 어디에서나 항상 iOS에서 사용됩니다.
클래스가 12 명의 델리게이트를 사용하는 것은 정상적인 현상입니다. 어딘가에 "플라잉"에 대한 코드에서, 위의 "플라잉"의 예에서
그것은, 그것은 ASIHttpRequests 어딘가에 대리자를 설정해야 할 것입니다, BigTop의 경우 [[UIAccelerometer sharedAccelerometer] setDelegate:self];
말을해야 할 것입니다
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:gid forKey:@"gid"];
[request setPostValue:nom forKey:@"nom"];
[request setDelegate:self];
(목표 - C와 함께 옛날 잊지 마세요, x.delegate=self
정확히 [x setDelegate:self]
과 동일.)
요즘 SW로 ift을 입력하면
x.delegate = self
이고 그게 전부입니다.
그게 당신이하는 일입니다. 대표단 은 메시지를 보냈습니다. 이라고 말하면 메시지를 보내고 싶습니다. 아주 일반적으로, 당신은 그들에게 "당신"에게 가고 싶습니다. 그래서 그 경우에 당신은 간단히 x.delegate=self
이라고 말합니다.
희망이 있습니다.
어쨌든 Bourne의 대답은 도움이되지 않습니다 .. 대의원은 기본적으로 객체에 대한 이벤트의 반응이며 ".delegate = self"는 이러한 프로토콜이 자체에서 채택되었음을 의미합니다. tableview의 델리게이트 메소드 "didSelectRowAtIndexPath"에 의해 행이 선택되었을 때 어떤 일이 발생하는지 ... viewController에 tableview가있는 경우 "didSelectRowAtIndexPath"가 해당 viewcontroller에 정의 된 경우에만 ... tableview .delegate = self "... "self.anything "은"anything "이 자기의 속성이라고 말하는 데 사용됩니다 .. 예 : NSString * anything; @property (nonatomic, retain) NSString * anything ;
다음 "self.anything"
Delegate
은 데이터/메시지 b/w 클래스의 두 객체를 전달/전달하는 데 사용됩니다. 여기에서 tableView
(보낸 사람)은 viewController
(받는 사람)에게 데이터/메시지를 보냅니다. 사용자 정의 에 UITableView
을 구현하는 예를 고려하십시오. 여기에서 UITableViewDataSource
& UITableViewDelegate
은 실제로 프로토콜입니다. 죄송합니다, UIKit Framework
는 오픈 소스 아니 십니다. 그러나 나는 많은 기사를 언급 한 후에 내부적으로 일어나는 일을 확신 할 것이다.
프로토콜은 요구 사항이있는 농구 코치와 같습니다. 그는 요구 사항을 사용하여 클래스, 구조체, enum what to do?
과 같은 플레이어에게 알립니다. 그러나 He/She doesn't knows
how to do?
에 의해 스스로. 따라서 해당 프로토콜을 준수하는 클래스 또는 구조체는 공을 덩크하는 동안 해당 요구 사항에 대한 구현을 제공해야합니다.
protocol UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
}
프로토콜은 데이터 소스 프로토콜이라고하며 다음과 같이 항상 "반환 유형"이있는 필수 기능을 포함합니다.
protocol UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
}
구현 jQuery과
class viewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let tableView = UITableView()
override func viewDidLoad {
tableView.delegate = self
tableView.dataSource = self
}
여기서 사용자의 ViewController 내부 위임자 (송신기)으로서 작용 tableView
위임 (수신기)로서 & viewController object i.e (self)
.
viewController
에서 UITableView
을 얻으려면 두 프로토콜을 모두 준수해야합니다.
따라서, viewController
클래스 개체는 두 프로토콜의 모든 필수 기능을 구현했습니다. 현재 self
은 UITableViewDelegate
유형 또는 UITableViewDataSource
유형으로 사용할 수 있습니다. 프로토콜을 준수하는 클래스의 객체 유형으로 사용할 수 있기 때문입니다. tableView
의 두 속성 즉, delegate
& dataSource
은 각각 동일한 프로토콜 유형을 가지고 있기 때문에 self
에 할당됩니다. 사용자가 선택하면 두 프로토콜의
비 선택적 기능
프로토콜 아래로 viewController
클래스 객체 UITableViewDelegate
기능
func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Do further processes like pushing or poping another viewController
}
프로토콜 UITableViewDataSource
기능 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")
}
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
)를 구현 섹션의 행tableview
(보낸 사람) 즉
UItableView()
을 호출합니다. e
UITableViewDelegate
아래
tableView
&
indexPath
은
delegate
속성을 통해
viewController
개체 (수신기)에있는 데이터로 전달됩니다. 이제
viewController
은 전달 된 데이터를 사용하여 새로운 사용자 정의 viewController에 푸시 또는 팝업과 같은 추가 프로세스를 수행합니다.
UITableViewDatasource
프로토콜 내부
tableView.delegate?.tableView(UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
2) 함수) tableview
(발신자로 지정 데이터를 제공한다. tableview
은속성을 통해 & indexPath
에있는 데이터를 개체 (수신기)에있는 데이터 소스 함수를 호출하여 viewController
개체에 요청합니다. 이제 viewController
은 전달 된 데이터를 사용합니다 &은 다시 사용자 정의 데이터를 tableview
으로 반환합니다. 이제 tableview
이
tableView.dataSource?.tableView(UITableView, numberOfRowsInSection section: Int) -> returns "10"
tableView.dataSource?.tableView(UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> returns "cell"
마지막으로 indexpath에서 "세포"의 섹션 & 종류의 "10"세포를 생성하는 데이터를 사용, UIKit Framework
전체는 모든 클래스에 & 데이터 소스의 디자인 패턴을 위임 사용 등 UIApplication
, UITableView
, UICollectionView
, UITextField
& 등이 있습니다. 죄송합니다, UIKit Framework
는 오픈 소스 아니 십니다.
안녕하세요, 저는 StackOverflow의 초보자입니다. 내 지식으로 몇 가지 알려진 Q에 답변을 둘러 보았습니다! –
답변이 정확합니다. 투표를하지 마십시오! 단지 becoz 이미 8 년 전 응답되었습니다. –
다운 투표는 답변이 정확하지 않은 경우 이상을위한 것입니다. 아래쪽 투표 버튼 위로 마우스를 가져 가면 도구 설명이 표시됩니다. 나는 최근의 질문에 답하고 이미 답을 갖고 있지 않은 것이 좋습니다. 좋아하는 태그를 추가하면 관련성이 더 높은 질문 목록이 필터링됩니다. 그렇게하면 대답 할 새로운 질문을 찾을 수 있습니다. – Fogmeister
우연히 중성미자 검출 대리인은 없습니다. 직접 작성해야합니다. – Fattie
u .. i는 정말 그것에 혼란스러워했다. –
가장 좋은 설명 나는 지금까지 본 적이있다 – SeanNieuwoudt