descargar - Outlets no pueden conectarse a contenido repetido de iOS 5
ios versiones (8)
@Mishal Awan
Si realmente quieres hacer eso y tienes un número finito de celdas. Tú puedes :
- Cambiando su
ViewController
para que sea una subclase deUITableViewController
, luego seleccione un archivo deTable View Controller
en suStoryBoard
- Cambio del contenido de
Table View
deTable View
en suStoryBoard
deDynamic Prototypes
aStatic Cells
Luego puede agregar algunas vistas a su celda, por ejemplo, algunas etiquetas
Conectando la
label
a suViewController
y continúe con el trabajo restante
Si desea crear una celda reutilizable, olvide lo que he dicho anteriormente
Soy nuevo en iOS. Estoy trabajando en la celda uitableview. Tenía que arrastrar y soltar el botón para ver la celda de la tabla desde el inspector de objetos. pero cuando estoy haciendo su IBoutlet está mostrando un error como "No se pueden conectar Outlets a contenido repetido" ¿Qué significa? no podemos hacer salidas de UIbutton en tableview cell.kindly lo revisamos. Estoy atrapado en esto. Estoy haciendo una salida como esta:
@property (weak, nonatomic) IBOutlet UIButton *sa;
y el error es "La salida sa del botón UI no es válida"
Lo he hecho en la conexión de salida de la etiqueta de la celda de UITableviewcell en UIViewController, debería cambiarse a Crear una célula personalizada en la subclase de UITableviewcell, y luego en la conexión de salida en esta subclase que el error desapareció.
No se puede, porque el botón es parte de una celda y habrá (posiblemente) múltiples instancias de esa celda cuando se ejecute la aplicación.
Suponga que puede hacer la conexión, y cuando se ejecuta la aplicación hay 2 celdas (y, por lo tanto, 2 botones), Cocoa Touch no puede decidir qué botón será referenciado por esa única salida (tampoco usted puede).
Puede subclasificar el UITableViewCell
, pedir a la vista de tabla que use su subclase para sus celdas y conectar el botón a la salida de la subclase . En ese caso, habrá varias instancias de la subclase, y cada instancia se asignará a una celda.
Puede crear una subclase para UITableViewCell como el siguiente código
Crear una nueva clase llamada CCell.h y CCell.m
en CCell.h
@interface CCell : UITableViewCell
@property(nonatomic,strong)IBOutlet UILabel *lblTemp;
@property(nonatomic,strong)IBOutlet UIButton *btnTemp;
@end
Ahora en tu Viewcontroller.h
#import "CCell.h"
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CCell *cell = (CCell *)[tblView dequeueReusableCellWithIdentifier:@"CCell"];
cell.lblTemp.text = @"asd";
cell.btnTemp.tag = indexPath.row;
[cell.btnTemp addTarget:self action:@selector(btnTempClicked:) forControlEvents:UIControlEventTouchUpInside]
return cell;
}
-(void)btnTempClicked:(UIButton *)btnTemp
{
NSLog(@"Button Clicked Index = %d",btnTemp.tag);
}
Ahora abra su Xib> toque en su UITableviewCell> abra el lado derecho del navegador> abra la tercera pestaña llamada (Clase personalizada)> agregue Clase = CCell
> ahora abra la última pestaña y obtendrá la opción de enlace lblTemp
.
Tal vez esto te ayude.
Siempre que desee crear una celda personalizada de TableView, se recomienda subclase UITableViewcell
y agregar UIButton
en esa clase. Y en su método delegado de cellForRowAtIndexPath
puede crear un objeto de tableviewCell subclase para cada celda.
Su respuesta es que utiliza un objeto en UITableViewCell reutilizándolo.
Por lo tanto, no puede crear su salida a menos que cree su clase para su "UITableViewCell".
A continuación hay una referencia para usted,
Espero que te sea de utilidad.
UITableViewCell
arrastrar y soltar el objeto en su UITableViewCell
, luego debe UITableViewCell
etiqueta para ese objeto.
Entonces puedes usarlo con su etiqueta.
Primero da un identificador a UITableViewCell
,
A continuación se muestra una imagen de referencia para ello.
Luego, asigne una etiqueta a su objeto UI, como se muestra en esta imagen de referencia.
A continuación se muestra un código de ejemplo para usted que uso regularmente,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *Cell = [self.TableListRegion dequeueReusableCellWithIdentifier:@"List"];
UIButton *objectOfButton = (UIButton *)[CellLast viewWithTag:200];
[objectOfButton addTarget:self action:@selector(YourSelector:) forControlEvents:UIControlEventTouchUpInside];
return Cell;
}
Ahora puedes recibir ese evento de botón por,
-(IBACTION)YourSelector:(id)sender{
// Your Button in Cell is selected.
// Do your stuff.
}
No dude en preguntar si necesita más ayuda al respecto.
Una solución muy simple es:
Simplemente tome la vista o las salidas de referencia NSLayoutConstraint en la subclase de la celda de vista de tabla en lugar del controlador de vista de tabla y acceda usando el objeto de la celda de vista de tabla en el método cellForRowAtIndexPath o cualquier otro método.
Nota: este es un objeto repetitivo por lo que no puede tomar referencia en el controlador de vista de tabla.
Ya que estás creando una celda personalizada, necesitas crear una clase para ella. Usted subclase UITableViewCell.
Por ejemplo (usando la propiedad que tenía en su pregunta):
Crear una nueva Clase Objective-C. Establezca la subclase en: UITableViewCell Asígnele un nombre apropiado (es decir, celda)
En tu archivo cell.h:
Cree su propiedad: @ propiedad (débil, no atómica) IBOutlet UIButton * sa;
En el archivo cell.m:
@synthesize sa = _sa;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
3.En Interface Builder, vuelva a la fila que creó. Haga clic en "Mostrar inspector de identidad". Debajo de "Clase personalizada", configúralo en tu archivo de celda.
4. Mantenga presionada la tecla "Opción" y haga clic en el archivo "cell.h". A continuación, conecte el botón al IBOutlet.
5.En su archivo de controlador de vista de tabla:
importa tu archivo cell.h
En el método cellForRowAtIndexPath
:
Cell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
¡Eso es!
Todo debería funcionar entonces. ¡Espero que esto ayude!